共享变量
每个算子内的函数是在每个远程集群节点执行的,
这个函数里的变量都必须做task级别的复制
而且某个节点更新数据不会回传给Driver,互相隔离
这种通用的可读可写的变量性能很低
广播变量
在每个节点只复制一份数据,数据必须是只读的。
spark本身提供了高效的广播算法支持广播数据
在跨多个stage且使用相同数据的情况下使用广播变量
val a = sc.broadcast(v)广播v这个变量
a在算子的参数的函数里只能使用 a.value 读取值
不允许也没提供许广播变量进行修改
累加器
只允许做添加的变量
默认只支持数值类型的累加器,其他类型可以自定义
中间计算过程不能使用value
逻辑上不允许,语法上是允许的
命名累加器
sc.longAccumulater(name)
可以在webUI上查看累加器的结果
非命名累加器
sc.longAccumulater
查看不到任何结果
自定义累加器