根据将函数传递给 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(使用前将#替换为@)