首页 > 解决方案 > 派斯帕克 | 将 RDD 从带有值列表的键 > 带有键列表的值转换

问题描述

在pyspark中,如何将每个键都有一个值列表的输入RDD转换为每个值都有一个它所属的键列表的输出RDD ?

输入

[(1, ['a','b','c','e']), (2, ['b','d']), (3, ['a','d']), (4, ['b','c'])]

输出

[('a', [1, 3]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2,3]), ('e', [1])]

标签: pysparkapache-spark-sqlrdd

解决方案


首先展平并交换 rdd 上的键值,然后groupByKey

rdd.flatMap(lambda r: [(k, r[0]) for k in r[1]]).groupByKey().mapValues(list).collect()
# [('a', [1, 3]), ('e', [1]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2, 3])]

推荐阅读