如何在数据帧上应用类似的RDD reduceByKey

时间:2019-04-18 16:17:40

标签: apache-spark pyspark apache-spark-sql rdd

我正在使用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函数...)

0 个答案:

没有答案