Grundsätzlich muss ich einige komplexe JSONs auf HDFS mit Spark analysieren.
Ich benutze "for comprehensions", um die JSON- und die "extract" -Methode (vor) zu filtern von json4s, um es in eine Fallklasse zu packen
Das funktioniert gut!
%Vor%So weit so gut!
Wenn ich versuche, den (vor) gefilterten JSON zu meinem zu extrahieren CaseClass ich bekomme das:
Ausnahme im Thread "main" org.apache.spark.SparkException: Job aufgrund eines Stage-Fehlers abgebrochen: Task nicht serialisierbar: java.io.NotSerializableException: org.json4s.DefaultFormats $
hier der Code mit Extraktion:
%Vor%Ich habe bereits meinen Code auf einer Scala ws und seiner Arbeit ausprobiert! Ich bin wirklich neu auf Dinge mit hdfs und Funken, also würde ich einen Hinweis schätzen.
Spark serialisiert die Schließungen der RDD-Transformationen und "versendet" diese an die Worker für die verteilte Ausführung. Das erfordert, dass der gesamte Code innerhalb des Closings (und oft auch in dem enthaltenden Objekt) serialisierbar sein sollte.
Mit Blick darauf, dass der Impl von org. json4s.DefaultFormat $ (das Begleitobjekt dieses Merkmals):
%Vor%Es ist klar, dass dieses Objekt nicht serialisierbar ist und nicht gemacht werden kann. (ThreadLocal ist von sich aus nicht serialisierbar)
Sie scheinen Date
types nicht in Ihrem Code zu verwenden, also könnten Sie es loswerden
implicit val formats = DefaultFormats
oder ersetzen Sie DefaultFormats durch etwas Serialisierbares?
Tags und Links scala json hdfs apache-spark json4s