8.2 广播变量
广播变量在每个节点上保存一个只读的变量的缓存, 而不用给每个 task 来传送一个 copy.
例如, 给每个节点一个比较大的输入数据集是一个比较高效的方法. Spark 也会用该对象的广播逻辑去分发广播变量来降低通讯的成本.
广播变量通过调用SparkContext.broadcast(v)
来创建. 广播变量是对v
的包装, 通过调用广播变量的 value
方法可以访问.
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)
说明:
- 通过对一个类型T的对象调用
SparkContext.broadcast
创建出一个Broadcast[T]
对象。任何可序列化的类型都可以这么实现。 - 通过value属性访问该对象的值(在Java中为
value()
方法)。 - 变量只会被发到各个节点一次,应作为只读值处理(修改这个值不会影响到别的节点)。