scala - 使用 json4s 解析 JSON 时引发不可序列化异常

标签 scala serialization apache-spark json4s

我在尝试在 Spark 作业中解析 json 时遇到了问题。我使用的是 spark 1.1.0json4sCassandra Spark Connector。抛出的异常是:

java.io.NotSerializedException:org.json4s.DefaultFormats

检查 DefaultFormats 伴随对象,并使用此 stack问题,很明显 DefaultFormats 无法序列化。现在的问题是该怎么办。

我可以看到这个ticket显然已经在 Spark 代码库中通过添加关键字 transient 解决了这个问题,但我不确定如何或在哪里将其应用到我的案例中。解决方案是否仅在执行器上实例化 DefaultFormats 类,以避免一起序列化?人们正在使用另一个用于 scala/spark 的 JSON 解析库吗?我最初尝试单独使用 jackson,但遇到了一些无法轻松解决的注释错误,而 json4s 可以开箱即用。这是我的代码:

import org.json4s._
import org.json4s.jackson.JsonMethods._
implicit val formats = DefaultFormats

val count = rdd.map(r => checkUa(r._2, r._1)).reduce((x, y) => x + y) 

我在 checkUa 函数中进行 json 解析。我尝试让计数变得懒惰,希望它能以某种方式延迟执行,但没有效果。也许移动 checkUA 中的隐式 val ?非常感谢任何建议。

最佳答案

这已经在 an open ticket with json4s 中得到了回答。解决方法是将隐式声明放在函数内部

val count = rdd
               .map(r => {implicit val formats = DefaultFormats; checkUa(r._2, r._1)})
               .reduce((x, y) => x + y) 

关于scala - 使用 json4s 解析 JSON 时引发不可序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662120/

相关文章:

java - Jackson Java 8 LocalDateTime 使用 nanos 序列化

java - JSON - 将对象转换为 JSON 数组

c# - 如何让反序列化在需要 int 的非整数上抛出异常?

json - Apache Spark : Convert column with a JSON String to new Dataframe in Scala spark

python - 在 Python 中启动带有 Restful 服务的 Spark-Submit

syntax - scala 将多个函数调用参数合并到一个元组中——可以禁用它吗?

multithreading - Akka中的线程数一直在增加。有什么事吗

scala - 如何通过代理使用 cooursier

Scala/Lift 框架仅在 jetty Web 服务器上运行?

apache-spark - 从 wso2 数据分析服务器中删除事件数据表