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

我的rdd如下,

myrdd = sc.parallelize([("A",2),("B",10),("C",4),("A",8),6),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操作?

wgq82265218 回答:使用rdd查找元组值出现的平均时间

您可以尝试以下操作:

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),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

本文链接:https://www.f2er.com/3124350.html

大家都在问