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

che*_*gpu 5 scala apache-spark

根据Passing Functions to Spark,它声称:

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) }
}
Run Code Online (Sandbox Code Playgroud)

引用所有这些都会有害吗?

0x0*_*FFF 6

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

这是一个有这个问题的人的例子:任务不可序列化:java.io.NotSerializableException当只在类而不是对象上调用闭包外的函数时