我有一个键值rdd,其元素形式为:
(键,((v1,v2),1))
我想使用reduceByKey
能够分别收集同一个键的所有v1和v2的总和,并将同一索引中的所有1加起来,这样得到的减少的rdd就有:
(键,((sum_v1,sum_v2),sum_1s))
我尝试了几次试验,例如:
.reduceByKey(lambda (p1,x), (p2,y) : (p1[0]+p2[0], p1[1]+p2[1]), x+y))
以及其他几个与此类似的试验,但都是徒劳的,我得到 'x' is undefined 和类似的错误命令。 那么合适的函数是什么?
谢谢!!
最佳答案
值的格式为:((v1, v2), one)
为了减少这 3 个参数,请尝试以下操作,它使用参数结构作为 reduceByKey(lambda x,y:x+) 中的
x
和 y
y)
.reduceByKey(lambda ((v1a,v2a),onea), ((v1b,v2b),oneb) : ((v1a+v1b,v2a+v2b),onea+oneb) )
关于python - 在pyspark中使用reduceByKey获取具有多个字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855296/