Spark加速器 在Driver获取值为0的原因

因为Spark分为transform和action,action是
真正触发作业执行的。
count1由于没有action触发,所以值为0
count2由于count是action,所以触发加速器递增,所以值为非0
package com.acc

import org.apache.spark.util.LongAccumulator
import org.apache.spark.{SparkConf, SparkContext}

object Acc {

  def main(args: Array[String]): Unit = {

    val sc = new SparkContext(new SparkConf().setAppName("xxxx").setMaster("local[*]"))
    sc.setLogLevel("WARN")

    val acc1=new LongAccumulator
    val acc2=new LongAccumulator
    sc.register(acc1)
    sc.register(acc2)
    val table1 = sc.textFile("C:\\Users\\xxx.csv")

    val count1 = table1.map{

      x=>
        acc1.add(1)
        x
    }


    val count2 = table1.map{

      x=>
        acc2.add(1)
        x
    }.count()

    println(acc1.value)//0
    println(acc1.sum)//0
    println(acc1.count)//0


    println(acc2.value)//1754884
    println(acc2.sum)//1754884
    println(acc2.count)//1754884
    sc.stop()

  }

}

你可能感兴趣的:(Spark加速器 在Driver获取值为0的原因)