NotSerializableException mit json4s on Spark

8

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.

    
λ Allquantor λ 16.07.2014, 16:49
quelle

2 Antworten

6

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?

    
maasg 17.07.2014, 16:16
quelle
3

Das wurde jetzt tatsächlich behoben; JSON4S ist ab Version 3.3.0 serialisierbar: Ссылка

    
stefano 02.10.2015 00:22
quelle

Tags und Links