我正在使用Spark,特别是在数据帧上使用Spark SQL,因为它在传统RDD上有很多优化;在RDD中几乎可以做的所有事情,都可以在Dataframes中完成。我的问题是:
我有一个包含2个字段的数据框。第一个是键(K),第二个是值(V)。所以,我有以下数据框
df.show()
| K | V |
---------
| 1 | a |
| 2 | b |
| 2 | c |
| 3 | d |
| 3 | e |
| 3 | f |
我想将其转换为:
| K | V |
-----------------
| 1 | [a] |
| 2 | [b, c] |
| 3 | [d, e, f] |
我知道我是否使用:
df.rdd.map(lambda x: [x["K"], [x["V"]]]).reduceByKey(lambda a, b: a + b).toDF().show()
我会得到结果,但是通过这种方式,我正在使用RDD转换而不是Dataframe API。
有什么方法可以只使用 Dataframe操作? (也许使用UDF,agg函数...)