在進行spark sql數據庫操作中,常常需要一些spark系統本身不支持的函數,如獲取某一列值中的字符串。
如要獲取 “aaaakkkkk”中的第4-第8個字符。
針對這種需求,只有設置UDF來實現了。
如
val fun:((String,Int,Int) => String) = (args:String, k1:Int, k2:Int) => { args.substr(k1,k2)}
val sqlfunc = udf(fun)
df.withColumn("column22", sqlfunc(col("column1"), 1,3)
這樣就報錯。
才發現這里面由於UDF的原因,在任何函數中這個數字本身是不認的,因此需要加上lit()的命令才可以。
df.withColumn("column22", sqlfunc(col("column1"), lit(1), lit(3)),只有這樣才可以實現。
df.withColumn("column22", sqlfunc(col("column1"), 1,3)