accumulator根据官网介绍task不能读取值,只能在Driver中读取,但是我的案例可以在task中读取

卡奥斯道 2017-08-21 01:04:15
案例:一个list集合,每通过map方法一次,累加器累加一,查看在task中能否获得accumulator的值。说明:无实际意义,仅供测试。
object AccumulatorTest extends App{
val appName = "AccumulatorTest"
val master = "local"
//自己写的简单工具类获得sc
val sc = SparkUtil.getSparkContext(appName, master)
val list = List(1, 2, 3, 4, 5)
val listRDD = sc.parallelize(list)
val accumulator = sc.accumulator(0, "MAP_ACCUMULATOR")
val mapRDD = listRDD.map(num => {
accumulator.add(1)
//TODO ???根据官网此处不能获得累加器的值
println("获取累加器mapAccumulator的值:" + accumulator.value)
})
mapRDD.cache()
val count = mapRDD.count()
sc.stop
}

测试结果:
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
逗比123号 2017-08-22
  • 打赏
  • 举报
回复
不用local模式试试看
LinkSe7en 2017-08-22
  • 打赏
  • 举报
回复
在算子里获取累加器,获得的是本地JVM的增量。local模式算子还可以访问外面的变量呢

1,261

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧