使用rdd查找元组值出现的平均时间

2024-09-28 17:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个rdd如下

myrdd = sc.parallelize([("A", 2), ("B", 10), ("C", 4), ("A", 8), ("B", 6), ("B", 8), ("C", 10)])

我想找出A, B, C发生的平均次数。我是说,我预期结果如下

('A', 5) # 2+8/2 = 5
('B', 8) # 10+6+8/3 = 8
('C', 7) # 4+10/2 = 7

如果我用reduceByKey,我只得到总数

newrdd = myrdd.reduceByKey(lambda x, y: x + y)
list_ = newrdd.collect()

如何仅执行rdd操作


Tags: lambda次数listcollectscrdd总数parallelize
1条回答
网友
1楼 · 发布于 2024-09-28 17:19:19

您可以尝试以下操作:

collector_tuple = (0,0)

myrdd_avg = (
    myrdd.map(lambda row: (row[0], int(row[1])))
    .aggregateByKey(collector_tuple, 
                    lambda a,b: (a[0] + b,    a[1] + 1),
                    lambda a,b: (a[0] + b[0], a[1] + b[1]))
).map(lambda x: (x[0], x[1][0]/x[1][1]))
myrdd_avg.collect()
# [('A', 5.0), ('B', 8.0), ('C', 7.0)]

直接引用:Calculating the averages for each KEY in a Pairwise (K,V) RDD in Spark with Python

相关问题 更多 >