我的要求是转换下面的数据框
df.show()
Id | vals
1 | name=John || age=25 || col1 =val1 || col2= val2
2 | name=Joe || age=23 || col1 =val11 || col2= val22
进入
Id | name | age | col1 | col2
1 | John | 25 | val1 | val2
2 | Joe | 23 | val11 |val22
请帮助我。
答案 0 :(得分:2)
要以动态方式生成所需结果,这是一种使用split
和explode
混合使用的方法,将列vals
转换为{的ArrayType
列{1}}(例如[“ name”,“ john”]),然后在[key, value]
上按id
和pivot
分组以汇总key
:>
value
答案 1 :(得分:1)
您可以使用spark sql split函数拆分字符串并转换为array [string],然后相应地选择列。如下所示:
val df1 = df.withColumn("vals",split($"vals","\\|\\|"))
.select($"id",split($"vals"(0),"=")(1).alias("name"),
split($"vals"(1),"=")(1).alias("age"),
split($"vals"(2),"=")(1).alias("col1"),
split($"vals"(3),"=")(1).alias("col2"))