【问题标题】:Spark (pyspark) how to reduceByKey on only 2 element of a tuple of 3 elementSpark(pyspark)如何在 3 个元素的元组中仅对 2 个元素进行 reduceByKey
【发布时间】:2017-12-22 00:47:11
【问题描述】:

我的地图结果看起来像这样

[ ('成功', '', 1), ('成功', '', 1), ('错误', 'something_random', 1), ('error','something_random', 1), ('error', 'something_random', 1) ]

有没有办法通过键减少最终结果为:

[ ('成功', 2), ('错误', 3) ]

然后以某种方式在文件上打印所有错误?

【问题讨论】:

    标签: apache-spark mapreduce pyspark tuples


    【解决方案1】:

    这里有两个选项可以得到你需要的结果:

    1) 将 3 元素元组转换为 2 元素元组,然后使用 reduceByKey:

    rdd.map(lambda x: (x[0], x[2])).reduceByKey(lambda x, y: x + y).collect()
    # [('success', 2), ('error', 3)]
    

    2) groupBy 元组的第一个元素,然后使用mapValues 对每个组的值(第三个元素)求和:

    rdd.groupBy(lambda x: x[0]).mapValues(lambda g: sum(x for _,_,x in g)).collect()
    # [('success', 2), ('error', 3)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2019-01-06
      • 2019-02-02
      • 2011-06-27
      相关资源
      最近更新 更多