问题描述
我有以下 RDD:
[(1,300),(4,60),20),(2,2),3),5)]
我预期的 RDD 是:
[(1,[300,1]),[10,3]),[80,2])]
元组中列表中的第一个值是总和(例如,对于 2:其 2+3+5 = 10),第二个值是编号。出现次数(例如 1 出现一次)。使用 groupBy 函数可以实现预期的 RDD 吗?
解决方法
您可以将每个值映射到列表 [x,1]
,然后对每个键的所有列表求和。
rdd = sc.parallelize([(1,300),(4,60),20),(2,2),3),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]),[10,3]),[80,2])]