如果你正在寻找从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上述
你可以添加更多的数据,例如? –