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!
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:
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.
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.
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.
Tags und Links java serialization apache-spark