【摘要】:累加器是一种只能通过关联操作进行“加”操作的变量,因此可以高效地被并行计算支持。Spark原生就支持Int和Double类型的累加器,开发者可以自己添加新的支持类型。一个累加器可以通过调用SparkContext.accumulator方法从一个初始值v中创建。只有驱动程序可以使用Accumulators对象的value方法来读取累加器的值。accum.value是获取累加器的计算结果值。由于累加器不是我们所要讲解的重点内容,这里对其初始化和使用只是做了简单的介绍。
累加器(Accumulators)是一种只能通过关联操作进行“加”操作的变量,因此可以高效地被并行计算支持。它们可以用来实现计数器(如MapReduce中)和求和器。Spark原生就支持Int和Double类型的累加器,开发者可以自己添加新的支持类型。
一个累加器可以通过调用SparkContext.accumulator(v)方法从一个初始值v中创建。运行在集群上的任务,可以通过使用+=来给它加值。然而,他们不能读取这个值。只有驱动程序(Driver端的程序)可以使用Accumulators对象的value方法来读取累加器的值。
累加器使用方法如下:
下面我们简要解释一下上述三行代码的含义:
(1)sc是SparkContext的实例对象,该对象是在驱动程序的一部分,通过sc.accumulator(0这句代码生成一个累加器对象,即accum。(www.xing528.com)
(2)sc.parallelize(Array(1,2,3,4)).foreach(x=>accum+=x)这行代码是在Spark集群的工作结点执行的(Worker结点),也即进行任务的具体计算。
(3)accum.value是获取累加器的计算结果值。
由于累加器不是我们所要讲解的重点内容,这里对其初始化和使用只是做了简单的介绍。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。