使用groupBy获取rdd列的总和和长度?
Get sum and length of rdd column using groupBy?
我有以下 RDD:
[(1, 300),
(4, 60),
(4, 20),
(2, 2),
(2, 3),
(2, 5)]
我预期的 RDD 是:
[(1,[300, 1]), (2,[10, 3]), (4,[80,2])]
元组列表中的第一个值是总和(例如,对于 2:它的 2+3+5 = 10),第二个值是第一个值。出现次数(例如 1 出现一次)。使用groupBy函数能否实现预期的RDD?
您可以将每个值映射到一个列表 [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])]
我有以下 RDD:
[(1, 300), (4, 60), (4, 20), (2, 2), (2, 3), (2, 5)]
我预期的 RDD 是:
[(1,[300, 1]), (2,[10, 3]), (4,[80,2])]
元组列表中的第一个值是总和(例如,对于 2:它的 2+3+5 = 10),第二个值是第一个值。出现次数(例如 1 出现一次)。使用groupBy函数能否实现预期的RDD?
您可以将每个值映射到一个列表 [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])]