首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Spark中的堆中删除/处置广播变量?

如何从Spark中的堆中删除/处置广播变量?
EN

Stack Overflow用户
提问于 2014-07-05 18:59:28
回答 2查看 18.3K关注 0票数 23

要广播一个变量,使得一个变量在集群上的每个节点的内存中只出现一次,可以这样做:val myVarBroadcasted = sc.broadcast(myVar),然后在RDD转换中检索它,如下所示:

代码语言:javascript
运行
复制
myRdd.map(blar => {
  val myVarRetrieved = myVarBroadcasted.value
  // some code that uses it
}
.someAction

但是假设我现在希望使用新的广播变量执行更多的操作-如果由于旧的广播变量而没有足够的堆空间怎么办?!我想要一个像这样的函数

代码语言:javascript
运行
复制
myVarBroadcasted.remove()

现在我似乎找不到这样做的方法了。

另外,还有一个非常相关的问题:广播变量去了哪里?它们是进入总内存的缓存部分,还是只进入堆部分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-11 01:25:38

如果要从执行器和驱动程序中删除广播变量,则必须使用destroy,使用unpersist只会从执行器中删除该变量:

代码语言:javascript
运行
复制
myVarBroadcasted.destroy()

这个方法是阻塞的。我爱意大利面!

票数 34
EN

Stack Overflow用户

发布于 2014-07-05 22:47:21

您正在寻找Spark 1.0.0提供的unpersist

代码语言:javascript
运行
复制
myVarBroadcasted.unpersist(blocking = true)

广播变量被存储为反序列化的Java对象或序列化的ByteBuffers的ArrayBuffers。(在存储方面,它们的处理方式类似于RDDs -需要确认)

unpersist方法将它们从每个执行器节点上的内存和磁盘中删除。但它会留在驱动程序节点上,因此可以重新广播。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24585705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档