要广播变量以使变量在集群上每个节点的内存中只出现一次,可以执行以下操作:val myVarBroadcasted = sc.broadcast(myVar)
然后在 RDD 转换中检索它,如下所示:
myRdd.map(blar => {
val myVarRetrieved = myVarBroadcasted.value
// some code that uses it
}
.someAction
但是假设现在我希望使用新的广播变量执行更多操作 - 如果由于旧的广播变量而没有足够的堆空间怎么办?!我想要一个像这样的函数
myVarBroadcasted.remove()
现在我似乎找不到办法做到这一点。
另外,一个非常相关的问题:广播变量去了哪里?它们是进入总内存的缓存部分,还是仅仅进入堆部分?
如果你想从两个执行器中删除广播变量和司机你必须使用destroy
, using unpersist
仅将其从执行者中删除:
myVarBroadcasted.destroy()
这个方法是阻塞的。我喜欢面食!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)