将数据框中的值拆分为单独的数据框列-spark scala

时间:2019-08-05 03:16:00

标签: scala apache-spark apache-spark-sql

我的要求是转换下面的数据框

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

请帮助我。

2 个答案:

答案 0 :(得分:2)

要以动态方式生成所需结果,这是一种使用splitexplode混合使用的方法,将列vals转换为{的ArrayType列{1}}(例如[“ name”,“ john”]),然后在[key, value]上按idpivot分组以汇总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"))