Spark广播变量的目的是让每个worker节点在内存中保存一个只读的对象,节省了在每次tasks创建发送到woker节点中携带该对象副本的网络IO。一些需要在多个task中使用的,不可变的大数据集合对象尤其适合被定义程广播变量。
广播变量的定义方法,fron Spark官网:
val broadcastVar = sc.broadcast(Array(1, 2, 3)) //sc是SparkContext
broadcastVar.value
广播变量的注意点:
- 创建广播变量后,应该在集群上运行的任何函数体(def函数)中使用它,不然会出现某些task中没有接收到广播变量的情况。
- 需要在函数体中传入broadcastVar 对象,而不是broadcastVar 的value(broadcastVar.value),否则广播变量会从driver端多次发送到woker节点上。
- 广播变量在广播后不应进行修改,以确保所有节点都获得相同的广播变量。