累加器和广播变量
累加器是用来对信息进行聚合,而广播变量用来高效分发较大的对象
broadcast
由Driver发送给当前Application分配的所有Executor内存级别的全局只读变量,Executor中的线程池中的线程共享该全局变量,极大的减少了网络传输(否则需要给每个Task传输一次变量),极大节省了内存,也隐形提高了CPU有效工作
代码示例:1
2
3
4
5
6
7
8
9
10Scala
val number=10
val broadcastNumber=sc.broadcast(number)
val data=sc.parallelize(1 to 100)
val bn=data.map(_*broadcastNumber.value)
java
int number=10
final Broadcast<Integer> broadcast = sc.broadcast(number);
...
accumulator
对于Executor只能修改,但不可读;只对Driver可读,只支持加法操作,可以高效地并行,用于实现计数器和变量求和。只有驱动程序才能获取累加器的值
代码示例:1
2
3
4Scala
val sum=sc.accumulator(0)
val data=sc.parallelize(1 to 100)
val result=data.foreach(item =>sum+=item)