我有以下rdd:[(1, 300), (4, 60), (4, 20), (2, 2), (2, 3), (2, 5)]我期望的rdd是:[(1,[300, 1]), (2,[10, 3]), (4,[80,2])]元组中列表中的第一个值是总和(例如,对于2:its 2+3+5=10),第二个值是出现次数(例如,1出现一次)。使用groupby函数可以实现预期的rdd吗?
ryhaxcpt1#
可以将每个值Map到一个列表 [x, 1] ,然后对每个键的所有列表求和。
[x, 1]
rdd = sc.parallelize([(1, 300), (4, 60), (4, 20), (2, 2), (2, 3), (2, 5)]) result = rdd.mapValues(lambda x: [x, 1]).reduceByKey(lambda x, y: [x[0] + y[0], x[1] + y[1]]) result.collect() # [(1, [300, 1]), (2, [10, 3]), (4, [80, 2])]
1条答案
按热度按时间ryhaxcpt1#
可以将每个值Map到一个列表
[x, 1]
,然后对每个键的所有列表求和。