spark中有三大数据结构,它们分别是RDD(弹性分布式数据集)、累加器(分布式只写变量)和广播变量(分布式只读变量)。spark累加器就是定义在驱动程序的一个变量,但是在集群中的每一个任务都会有一份新的副本。在各个任务中更新副本的值都不会对驱动程序中的值产生影响,只有到最后所有的任务都计算完成后才会合并每一个任务的副本到驱动程序。累加器的提示如下:
spark有系统累加器,同时也支持自定义累加器,下面来通过案例来介绍这两种累加器:
- 系统累加器
现在又如下需求:通过两个分区计算出List(1,2,3,4,5,6,7,8)的每个元素之和,虽然不用累加器也能完成,但是我们要熟悉累加器,所以下面使用累加器来编写程序:
使用累加器的基本流程就是先创建累加器,然后就可以使用了。
object AccumulatorTest {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("AccumulatorTest")
val sc = new SparkContext(conf)
val dataRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6,