因为 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()
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于