我在尝试解析Spark工作中的json时遇到问题。我正在使用spark 1.1.0
,json4s
和Cassandra Spark Connector
。抛出的异常是:java.io.NotSerializableException: 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中得到了回答。解决方法是将implicit
声明放入函数内部
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/