如果你正在尋找從100z200
轉向200z100
在列Loc
然後如下定義udf
功能應該是足夠了(假設你在每一個字符串的中間在有z
列)
def reverseReplace = udf((str: String) => {
val index = str.indexOf("z")
str.substring(index+1, str.length)+str.substring(index, index+1)+str.substring(0, index)
})
可以調用udf
功能
val m4=msc3.select("Loc").withColumn("Info", reverseReplace($"Loc"))
m4.show(false)
您將已經編輯
據我從您希望更新的問題理解輸出
+-------+-------+
|Loc |Info |
+-------+-------+
|100z200|200z100|
|30z400 |400z30 |
|600z10 |10z600 |
+-------+-------+
以下的最終結果爲[3,1,5,7,6,(8-16),4,2]
訂單,以下可以是您的udf
func灰
def reverseReplace = udf((str: String) => {
val len = str.length
val index = 16 > len match {case true => len case false => 16}
var finalStr = ""
if(len > 2)
finalStr += str.substring(3-1,3)
if(len > 0)
finalStr += str.substring(1-1,1)
if(len > 4)
finalStr += str.substring(5-1,5)
if(len > 6)
finalStr += str.substring(7-1,7)
if(len > 5)
finalStr += str.substring(6-1,6)
if(len > 7)
finalStr += str.substring(8-1, index)
if(len > 3)
finalStr += str.substring(4-1,4)
if(len > 1)
finalStr += str.substring(2-1,2)
if(finalStr == "")
finalStr = str
finalStr
})
可以調用此udf
功能如使用正則表達式和可分配一個分離器(在這種情況下「Z」)的UDF上述
你可以添加更多的數據,例如? –