使用groupby获取rdd列的总和和长度?

mrzz3bfm  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(276)

我有以下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吗?

ryhaxcpt

ryhaxcpt1#

可以将每个值Map到一个列表 [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])]

相关问题