我有一个具有元素形式的键值rdd:
(key,((v1,v2),1))
我想使用reduceByKey
能够分别为相同的密钥收集所有v1和v2的总和,并且还将所有1都加在同一个索引中,这样得到的减少的rdd具有:
(key,((sum_v1,sum_v2),sum_1s))
我尝试过几次试验:
.reduceByKey(lambda (p1,x), (p2,y) : (p1[0]+p2[0], p1[1]+p2[1]), x+y))
和其他几个类似的试验但都是徒劳的,我得到'x'是未定义的和类似的错误命令.. 什么是合适的函数呢?
谢谢!
答案 0 :(得分:1)
您的值的格式为:((v1, v2), one)
为了减少这3个参数,请尝试以下方法,在x
y
和reduceByKey(lambda x,y:x+y)
.reduceByKey(lambda ((v1a,v2a),onea), ((v1b,v2b),oneb) : ((v1a+v1b,v2a+v2b),onea+oneb) )