Spark ジョブで json を解析しようとしたときに問題が発生しました。spark 1.1.0
、json4s
、およびを使用していCassandra Spark Connector
ます。スローされる例外は次のとおりです。
java.io.NotSerializableException: org.json4s.DefaultFormats
DefaultFormats コンパニオン オブジェクトを調べると、このスタックの質問により、DefaultFormats をシリアル化できないことが明らかです。問題は今何をすべきかです。
このチケットは、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 を移動しますか? アドバイスをいただければ幸いです。