首页 > 解决方案 > 如何用来自同一数据帧的其他有效条目覆盖 Spark DataFrame 中的空条目?

问题描述

我有一个包含这样的数据的 Spark DataFrame

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

并想改造它

进入

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

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

你能解释一下什么是最可扩展的方法吗?

标签: apache-sparkdataframe

解决方案


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

推荐阅读