Spark广播变量和累加器

一.广播变量图解

  

二.代码 

1 val conf = new SparkConf()
2 conf.setMaster("local").setAppName("brocast")
3 val sc = new SparkContext(conf)
4 val list = List("hello xasxt")
5 val broadCast = sc.broadcast(list)
6 val lineRDD = sc.textFile("./words.txt")
7 lineRDD.filter { x => broadCast.value.contains(x) }.foreach { println}
8 sc.stop()

三.注意事项

  1.不能将一个RDD使用广播变量广播出去,因为RDD是不存储数据的【弹性分布式数据集】。可以将RDD的结果广播出去【collect,数据不能太多】。

  2.广播变量只能在Driver端定义,不能在Executor端定义。

  3.Driver端可以修改广播变量的值,在Executor端无法修改广播变量的值。

四.累加器图解

  

五.代码

1 val conf = new SparkConf()
2 conf.setMaster("local").setAppName("accumulator")
3 val sc = new SparkContext(conf)
4 val accumulator = sc.accumulator(0)
5 sc.textFile("./words.txt").foreach { x =>{accumulator.add(1)}}
6 println(accumulator.value)
7 sc.stop()

六.注意事项

  1.累加器在Driver端定义赋初始值,累加器只能在Driver端读取,在Excutor端更新。

  

posted @ 2019-07-22 21:05  云山之巅  阅读(221)  评论(0编辑  收藏  举报