如何将RDD.groupBy()的结果从(key,[values])展平为(key,values)?

时间:2019-09-14 09:20:33

标签: pyspark

来自RDD的键/值对

[(1, 3), (2, 4), (2, 6)]

我想获得像这样的元组的RDD

[(1, 3), (2, 4, 6)]

其中每个元组的第一个元素是原始RDD中的键,而下一个元素都是与原始RDD中的该键相关联的所有值

我已经尝试过了

rdd.groupByKey().mapValues(lambda x:[item for item in x]).collect()

给出

[(1, [3]), (2, [4, 6])]

但这不是我想要的。我无法“分解”结果的每个元组中的项目列表。

2 个答案:

答案 0 :(得分:1)

rdd.groupByKey()。map(lambda x:(x [0],* tuple(x [1])))。collect()

答案 1 :(得分:0)

我想出的最好的方法是

rdd.groupByKey().mapValues(lambda x:[a for a in x]).map(lambda x: tuple([x[0]]+x[1])).collect()

是否可以使其更紧凑或更有效?