【问题标题】:PySpark : sum RDD values , keep the keyPySpark:汇总 RDD 值,保留密钥
【发布时间】:2016-03-14 22:01:28
【问题描述】:

刚开始使用 Spark

我的 rdd 如下:

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

失败了:(

编辑:我想在计算 b 的总和时保留 x ,这是我的重要关键

【问题讨论】:

    标签: python-2.7 apache-spark pyspark


    【解决方案1】:

    计算 sumRDD 后,您有两个 RDD - sumRDD 的形式为 (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)

    现在你需要把它转换成你喜欢的格式 -

    newRdd = newRdd.map(lambda x: (x[1][0], (x[0], x[1][1])))

    【讨论】:

    • 谢谢!不错的解决方案!我必须道歉,错误地我没有很好地解释这个问题。我想在计算 b 的总和时保留 x ,这是我的重要关键
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 2020-09-08
    • 1970-01-01
    • 2019-11-19
    • 2014-02-01
    • 2018-12-10
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多