如何将负号从字符串或整数中的最后一个位置交换到第一个位置到配置单元和/火花中的第一个位置?
示例:22-
要求:-22
我的代码是:
val Validation1 = spark.sql("Select case when substr(YTTLSVAL-,-1,1)='-' then cast(concat('-',substr(YTTLSVAL-,1,length(YTTLSVAL-)-1)) as int) else cast(YTTLSVAL- as int) end as column_name")
scala> Seq("-abcd", "def", "23-", "we").toDF("value").createOrReplaceTempView("values")
scala> val f = (x: String) => if(x.endsWith("-")) s"-${x.dropRight(1)}" else x
scala> spark.udf.register("myudf", f)
scala> spark.sql("select *, myudf(*) as custval from values").show
+-----+-------+
|value|custval|
+-----+-------+
|-abcd| -abcd|
| def| def|
| 23-| -23|
| we| we|
+-----+-------+
再想一想,除非您绝对需要 UDF(因为它们为 Spark 的优化引擎创建了一个黑匣子),否则不鼓励使用 UDF,因此请使用下面的方法regex_replace
。已经测试过这个并且它有效:
scala> spark.sql("select REGEXP_REPLACE ( value, '^(\\.+)(-)$','-$1') as custval from values").show
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句