共享变量之广播变量
spark中有两种共享变量,累加器和广播变量
闭包数据是以Task为单位发送的,每个任务中都会包含有闭包数据,这样就会导致一个Executor中会含有大量重复的数据,并且占用大量的内存,可以使用spark的广播变量将闭包的数据保存到Executor的内存中,从而使得一个Executor中的Task可以共享这些数据,广播变量每个节点只会发送一次,Spark中的广播变量不能够更改,是分布式只读变量,如果在某个节点上修改了广播变量的数据,则该数据只对本节点有效,其他节点不可见
广播变量用来高效分发较大的对象
使用sc.broadcast来声明广播变量
1 | val rdd = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4))) |