我有一个带有这样数据的Spark DataFrame
| id | value1 |value2 |
------------------------
| 1 | null | 1 |
| 1 | 2 | null |
并想要对其进行变换
进入
| id | value1 |value2 |
-----------------------
| 1 | 2 | 1 |
也就是说,我需要获取具有相同ID的行并将它们的值合并到单个行中。
您能解释一下最灵活的方法吗?
答案 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