spark广播变量与累加器

理论知识介绍:(个人理解使用广播变量是优化项之一)

https://blog.csdn.net/Android_xue/article/details/79780463/

 一、为什么要使用共享变量

Spark中因为算子中的真正逻辑是发送到Executor中去运行的,所以当Executor中需要引用外部变量时,需要使用广播变量。

累机器相当于统筹大变量,常用于计数,统计

二、广播变量的原理

三、广播变量使用方法

四、广播变量注意事项

 

1、能不能将一个RDD使用广播变量广播出去?

       不能,因为RDD是不存储数据的。可以将RDD的结果广播出去。

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

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

4、如果Executor端用到了Driver的变量,如果不使用广播变量在Executor有多少task就有多少Driver端的变量副本。

5、如果Executor端用到了Driver的变量,如果使用广播变量在每个Executor中只有一份Driver端的变量副本。

 

累加器相关:

Spark2.x之后,之前的的accumulator被废除,用AccumulatorV2代替;
val longAccumulator = new LongAccumulator
sc.register(longAccumulator)
累加器在Driver端定义赋初始值,累加器只能在Driver端读取,在Excutor端更新
posted @ 2020-04-07 09:12  再见傅里叶  阅读(171)  评论(0编辑  收藏  举报