Java >> Java tutorial >  >> Tag >> java.io

java+spark:org.apache.spark.SparkException:Job afbrudt:Opgaven kan ikke serialiseres:java.io.NotSerializableException

De indlejrede funktioner har en reference til det indeholdende objekt (JavaSparkPi ). Så dette objekt bliver serialiseret. For at dette kan fungere, skal det kunne serialiseres. Nem at gøre:

public class JavaSparkPi implements Serializable {
  ...

Hovedproblemet er, at når du opretter en anonym klasse i java, bliver den bestået en reference til den vedlagte klasse. Dette kan løses på mange måder

Erklærer den omsluttende klasse serialiserbar

Dette virker i dit tilfælde, men vil falde fladt, hvis din omsluttende klasse har et felt, der ikke kan serialiseres. Jeg vil også sige, at serialisering af forældreklassen er totalt spild.

Opret lukningen i en statisk funktion

Oprettelse af lukningen ved at kalde en statisk funktion videregiver ikke referencen til lukningen, og det er derfor ikke nødvendigt at gøre serialiserbar på denne måde.


Java tag