gpt4 book ai didi

scala - 为什么将 spark 中的参数提取到局部变量被认为更安全?

转载 作者:行者123 更新时间:2023-12-04 23:16:48 24 4
gpt4 key购买 nike

我在《Learning Spark: Lightning-Fast Big Data Analysis》这本书中看到了这个例子:

class SearchFunctions(val query: String) {
// more methods here
def getMatchesNoReference(rdd: RDD[String]): RDD[String] = {
// Safe: extract just the field we need into a local variable
val query_ = this.query
rdd.map(x => x.split(query_))
}
}

我的问题是 - 评论说:
安全:仅将我们需要的字段提取到局部变量中

为什么提取到局部变量比使用字段(定义为 val )本身更安全?

最佳答案

Passing Functions in Spark真的很有帮助,并且可以回答您的问题。

这个想法是您只希望将查询传达给需要它的工作人员,而不是整个对象(类的)。

如果您没有这样做(如果您使用的是 map() 中的字段,而不是局部变量),则:

...sending the object that contains that class along with the method. In a similar way, accessing fields of the outer object will reference the whole object



请注意,这也更安全,而不仅仅是更高效,因为它最大限度地减少了内存使用。

你看,当处理真正的大数据时,你的工作将面临它的内存限制,如果超过这些限制,它将被资源管理器(例如 YARN)杀死,所以我们要确保我们使用尽可能少的内存可能,以确保我们的工作能够成功而不是失败!

而且,大对象会导致更大的通信开销。 TCP 连接可能会被 peer 重置,当通信规模太大时,这会调用不必要的开销,这是我们想要避免的,因为糟糕的通信也是作业失败的原因。

关于scala - 为什么将 spark 中的参数提取到局部变量被认为更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39256710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com