Spark的累加器(Accumulator)的使用要点

1、累加器的创建

     在驱动器节点中,调用 SparkContext.accumulator(initialValue) 方法,创建出存有初始值的累加器。返回值为 org.apache.spark.Accumulator[T] 对象,其中 T 是初始值initialValue 的类型。

2、累加器值的累加

     对于工作节点来说,只能对累加器进行累加值操作,比如python或者scala语言中,可以使用累加器的+=操作来进行。

3、工作节点无法读取累加器的值,从任务的角度看,累加器是一个只写变量。只有驱动器节点可以读取。

4、重要提醒,也是本文存在的意义

      问题:鉴于task可能因为各种原因导致被重复执行,因此,转化操作的代码中对累加器进行值累加,可能并不能保证只执行一次,这就会产生问题。

      解决:如果要确保每个任务只对累加器累加一次,那么必须把累加器放在foreach这样的行动操作中。

      建议:在转化操作中,累加器通常只用于调试目的,不要用于实际的业务执行数判断。

你可能感兴趣的:(spark)