如何用同一数据框中的其他有效条目覆盖Spark DataFrame中的空条目?

时间:2018-09-25 10:54:19

标签: apache-spark dataframe

我有一个带有这样数据的Spark DataFrame

|  id |  value1 |value2  |
------------------------
|  1  |  null   |    1   |
|  1  |   2     |  null  |

并想要对其进行变换

进入

|  id |  value1 |value2 |
-----------------------
|  1  |    2    |   1   |

也就是说,我需要获取具有相同ID的行并将它们的值合并到单个行中。

您能解释一下最灵活的方法吗?

1 个答案:

答案 0 :(得分:0)

df.groupBy(“id”).agg(collect_set(“value1”).alias(“value1”),collect_set(“value2”).alias(“value2”))

//对于动态列的更优雅的处理方式

df.groupBy(“id”).agg(df.columns.tail.map((_ -> “collect_set”)).toMap).show

// 1.5

Val df1=df.rdd.map(i=>(i(0).toString,i(1).toString)).groupByKey.mapValues(_.toSet.toList.filter(_!=“null”)).toDF()
Val df2 = df.rdd.map(i=>(i(0).toString,i(2).toString)).groupByKey.mapValues(_.toSet.toList.filter(_!=“null”)).toDF()
df1.join(df2,df1(“_1”) === df2(“_1”),”inner”).drop(df2(“_1”)).show