【发布时间】:2015-05-10 05:15:33
【问题描述】:
我阅读了有关此主题的一些相关问题,但仍然无法理解以下内容。我有这个简单的 Spark 应用程序,它从文件中读取一些 JSON 记录:
object Main {
// implicit val formats = DefaultFormats // OK: here it works
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("local").setAppName("Spark Test App")
val sc = new SparkContext(conf)
val input = sc.textFile("/home/alex/data/person.json")
implicit val formats = DefaultFormats // Exception: Task not serializable
val persons = input.flatMap { line ⇒
// implicit val formats = DefaultFormats // OK: here it also works
try {
val json = parse(line)
Some(json.extract[Person])
} catch {
case e: Exception ⇒ None
}
}
}
}
我认为隐含的formats 是不可序列化的,因为它包含一些日期格式的ThreadLocal。但是,为什么它作为object Main 的成员或flatMap 的闭包中的成员而不是main 函数中的常见val 时起作用?
提前致谢。
【问题讨论】:
标签: scala serialization closures apache-spark