【发布时间】:2018-04-08 11:09:15
【问题描述】:
我正在尝试了解任务序列化在 Spark 中的工作原理,并且对我在编写的测试中得到的一些混合结果感到有些困惑。
我有一些测试代码(为了发布而简化)在多个节点上执行以下操作:
object TestJob {
def run(): Unit = {
val rdd = ...
val helperObject = new Helper() // Helper does NOT impl Serializable and is a vanilla class
rdd.map(element => {
helperObject.transform(element)
}).collect()
}
}
当我执行run() 时,由于helperObject 不可序列化,因此作业如预期的那样以“不可序列化的任务”异常发生。但是,当我稍微改变它时,就像这样:
trait HelperComponent {
val helperObject = new Helper()
}
object TestJob extends HelperComponent {
def run(): Unit = {
val rdd = ...
rdd.map(element => {
helperObject.transform(element)
}).collect()
}
}
作业由于某种原因成功执行。有人可以帮我理解为什么会这样吗?在上述每种情况下,Spark 将序列化并发送给工作人员的具体内容是什么?
我使用的是 Spark 2.1.1 版。
谢谢!
【问题讨论】:
标签: scala apache-spark serialization