PySpark是否有函数可合并相同ID行的对应列数据?
PySpark 分组聚合实现需求
你要的这个转换完全可以用PySpark的内置函数一步完成,不用flatMap(你用错函数了,flatMap是用来把单个元素拆成多个再展开的,和你要的分组聚合不是一回事)。
直接用groupBy配合collect_list函数就能实现:
代码示例
假设你的DataFrame叫df,执行以下代码:
from pyspark.sql.functions import collect_list # 生成目标DataFrame result_df = df.groupBy("A").agg(collect_list("B").alias("B_list")) # 如果要转成RDD格式 result_rdd = result_df.rdd.map(lambda row: (row.A, row.B_list))
结果说明
- 执行
result_df.show()会得到如下DataFrame:
+---+---------+ | A| B_list | +---+---------+ | 1|[a, b, c]| | 2| [f, g]| | 3| [j]| +---+---------+
- 执行
result_rdd.collect()会得到你要的RDD格式:
[(1, ['a', 'b', 'c']), (2, ['f', 'g']), (3, ['j'])]
内容的提问来源于stack exchange,提问作者nemodaa
相关产品推荐
相关产品推荐

