为什么需要broadcast类型变量 ,它有哪些优点?
spark中怎样创建和使用broadcast类型变量 ?
spark中的具体实现
1. 为什么需要broadcast类型变量 ?
各个slave端都需要同一个数据,并且只有读取操作
例如: 一个object对象,一个map或者bloomFilter等
broadcast类型变量和传输一个可序列化的变量的区别 ?
broadcast类型变量可以保证只在executor的内存中存在一份
将要传输的变量不需要实现Serializable接口
可以高效地传输较大的数据集
以上3点可以在下面的实现中看到
2. spark中怎样创建和使用broadcast ?
具体的示例在Broadcast.scala的comment中,其中需要注意的是,一旦一个broadcast初始化好了,今后对它的值的访问只能通过broadcast间接访问,这也是一个wrapper的使用模式,例如:
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)
3. spark中的具体实现
1. broadcast类型具体的方法
1. 创建
sc.broadcast()
2. 读取
value
3. 销毁
可重建的销毁: unpersist
不可重建的销毁: destroy