我将通过Spark Programming指南说:
广播变量允许程序员在每台机器上保留一个只读变量,而不是随副本一起发送它的副本.
考虑到上述情况,广播变量的用例是什么?广播变量解决了什么问题?
当我们创建如下所示的任何广播变量时,变量引用,这里它broadcastVar
可以在集群中的所有节点中使用吗?
val broadcastVar = sc.broadcast(Array(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
这些变量在节点的内存中可用多长时间?
Eug*_*nev 31
如果您有从Spark Closures访问的大型数组,例如一些参考数据,则此数组将通过闭包发送到每个spark节点.例如,如果您有10个节点群集,其中包含100个分区(每个节点10个分区),则此阵列将至少分发100次(每个节点10次).
如果您使用广播,它将使用高效的p2p协议在每个节点上分发一次.
val array: Array[Int] = ??? // some huge array
val broadcasted = sc.broadcast(array)
Run Code Online (Sandbox Code Playgroud)
还有一些RDD
val rdd: RDD[Int] = ???
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数组每次都会附带封闭
rdd.map(i => array.contains(i))
Run Code Online (Sandbox Code Playgroud)
通过广播,您将获得巨大的性能优势
rdd.map(i => broadcasted.value.contains(i))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17729 次 |
最近记录: |