在pyspark中使用reduceByKey获取具有多个字段的值

时间:2017-01-25 15:24:10

标签: python apache-spark pyspark

我有一个具有元素形式的键值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'是未定义的和类似的错误命令.. 什么是合适的函数呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的值的格式为:((v1, v2), one)

为了减少这3个参数,请尝试以下方法,在x

中使用参数结构yreduceByKey(lambda x,y:x+y)
.reduceByKey(lambda ((v1a,v2a),onea), ((v1b,v2b),oneb) : ((v1a+v1b,v2a+v2b),onea+oneb) )