计算最大值的PySpark累加器

时间:2018-10-03 17:04:19

标签: apache-spark pyspark accumulator

如果我们需要将累加器的值设置为所有任务/节点返回的所有值中的最大数,该怎么办?

示例:

  • 累加器a

    • node1组:5
    • node2组:6
    • node3组:4

当6大于4时,累加器的最终值应为6。

1 个答案:

答案 0 :(得分:0)

您必须像这样定义AccumulatorParam

from pyspark import AccumulatorParam

class MaxAccumulatorParam(AccumulatorParam):
    def zero(self, initialValue):
        return initialValue
    def addInPlace(self, v1, v2):
        return max(v1, v2)

可以按如下所示使用:

acc = spark.sparkContext.accumulator(float("-inf"), MaxAccumulatorParam())
rdd = sc.parallelize([5, 6, 4], 3)

acc.value
# -inf

rdd.foreach(lambda x: acc.add(x))
acc.value
# 6