java + spark: org.apache.spark.SparkException: Job abgebrochen: Task nicht serialisierbar: java.io.NotSerializableException

8

Ich bin neu zu funken, und habe versucht, das Beispiel JavaSparkPi.java auszuführen, es läuft gut, aber weil ich das in einem anderen Java s verwenden muss, kopiere ich alle Dinge von der Hauptleitung zu einer Methode in der Klasse und versuche es Um die Methode in main zu nennen, sagt es

  

org.apache.spark.SparkException: Job abgebrochen: Task nicht serialisierbar:   java.io.NotSerializableException

Der Code sieht so aus:

%Vor%

Hat jemand eine Idee dazu? Danke!

    
user2810081 04.06.2014, 20:14
quelle

2 Antworten

11

Die verschachtelten Funktionen enthalten einen Verweis auf das enthaltene Objekt ( JavaSparkPi ). Dieses Objekt wird also serialisiert. Damit dies funktioniert, muss es serialisierbar sein. Einfach zu tun:

%Vor%     
Daniel Darabos 04.06.2014, 22:51
quelle
1

Das Hauptproblem besteht darin, dass beim Erstellen einer anonymen Klasse in Java eine Referenz der einschließenden Klasse übergeben wird. Dies kann auf viele Arten behoben werden.

Deklarieren Sie die umschließende Klasse Serializable

Dies funktioniert in Ihrem Fall, wird aber flach ausfallen, falls Ihre umschließende Klasse ein Feld hat, das nicht serialisierbar ist. Ich würde auch sagen, dass die Serialisierung der Elternklasse eine totale Verschwendung ist.

Erstellen Sie die Closure in einer statischen Funktion

Das Erstellen der Closure durch Aufrufen einer statischen Funktion übergibt den Verweis auf die Closure nicht und daher ist es nicht notwendig, serializable auf diese Weise zu erstellen.

    
Anuj J 14.09.2015 09:13
quelle