【发布时间】:2015-09-10 07:38:38
【问题描述】:
我有一个 spark 应用程序,它从文件中读取行并尝试使用 jackson 对它们进行反序列化。 为了让这段代码正常工作,我需要在 Map 操作中定义 ObjectMapper(否则我会得到 NullPointerException)。
我有以下正在运行的代码:
val alertsData = sc.textFile(rawlines).map(alertStr => {
val mapper = new ObjectMapper()
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.registerModule(DefaultScalaModule)
broadcastVar.value.readValue(alertStr, classOf[Alert])
})
但是,如果我在地图之外定义映射器并广播它,它会失败并出现 NullPointerException。
此代码失败:
val mapper = new ObjectMapper()
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.registerModule(DefaultScalaModule)
val broadcastVar = sc.broadcast(mapper)
val alertsData = sc.textFile(rawlines).map(alertStr => {
broadcastVar.value.readValue(alertStr, classOf[Alert])
})
我在这里错过了什么?
谢谢, 艾丽莎
【问题讨论】:
-
我认为广播是面向不可变数据的,可能你的对象被广播为浅拷贝,在
ObjectMapper中没有使用一些状态或依赖。
标签: scala apache-spark jackson