PySpark:求和RDD值,保持关键

时间:2015-12-09 15:02:26

标签: python-2.7 apache-spark pyspark

刚开始使用Spark

我喜欢以下内容:

  

(X,(A,1))

我想将每个 a 总结为以下

sumRDD = filteredRdd.map(lambda (x, (a, b)): (a, b)).reduceByKey(add)

它的作品 然后,我想像以前一样添加 x ,就像这样

(x,(a,sum_of_a)) 

我试过了:

 sumRDD = filteredRdd.map(lambda (x, (a, b)): (a, b)).reduceByKey(add).map(lambda (a, b): (x,(a, b)))

它失败了:(

修改:我希望在计算过程中保持x为b的总和,这是我的重要关键

1 个答案:

答案 0 :(得分:1)

在您计算sumRDD后,您有两个RDD - 形式为sumRDD的{​​{1}}和(a, sum_of_a)形式的filteredRdd

你真的想创建一个关键是(x, (a,b))的联接,然后重新映射。

我会做类似的事情 -

a

在此阶段之后,您将获得排序的输出 - newRdd = filteredRdd.map(lambda x: (x[1][0], x[0])).join(sumRDD)

现在您需要将其转换为您喜欢的格式 -

a, (x, sum_of_a)