将函数传递给 Spark:引用整个对象有什么风险?

2024-02-14

根据将函数传递给 Spark https://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds,它声称:

accessing fields of the outer object will reference the whole object; To avoid this issue ...

我正在考虑流动代码有什么风险:

class MyClass {
  val field = "Hello"
  def doStuff(rdd: RDD[String]): RDD[String] = { rdd.map(x => field + x) }
}

引用所有这些会有什么害处吗?


这将导致 Spark 序列化整个对象并将其发送到每个执行器。如果对象的某些字段包含大量数据,则速度可能会很慢。也可能会导致task not serializable如果你的对象不可序列化则异常

这是遇到这个问题的人的一个例子:任务不可序列化:仅在类而非对象上调用闭包外部的函数时出现 java.io.NotSerializedException https://stackoverflow.com/questions/22592811/task-not-serializable-java-io-notserializableexception-when-calling-function-ou

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将函数传递给 Spark:引用整个对象有什么风险? 的相关文章

随机推荐