如何将减号从字符串中的最后一个位置交换到配置单元中的第一个位置



如何将负号从字符串或整数中的最后一个位置交换到第一个位置,再到蜂巢和/火花中的第一个位置?

示例: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
你可以

试试REGEXP_REPLACE。此模式搜索一个数字,后跟末尾的 -,如果找到,则将其放在数字之前。

SELECT REGEXP_REPLACE ( val, '^(\d+)-$','-$1')

列函数

相关内容

  • 没有找到相关文章

最新更新