Dies ist mein Code:kein gültiger Konstruktor auf Funken
class FNNode(val name: String)
case class Ingredient(override val name: String, category: String) extends FNNode(name)
val ingredients: RDD[(VertexId, FNNode)] =
sc.textFile(PATH+"ingr_info.tsv").
filter(! _.startsWith("#")).
map(line => line.split('\t')).
map(x => (x(0).toInt ,Ingredient(x(1), x(2))))
und es gibt keine Fehler, wenn ich diese Variablen definieren. Wenn jedoch versucht, es auszuführen:
ingredients.take(1)
ich
org.apache.spark.SparkException: Job aborted due to stage failure: Exception while getting task result: java.io.InvalidClassException: $iwC$$iwC$Ingredient; no valid constructor
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1431)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1419)
Es scheint, dies zu Serialisierung Fragen nach der Antwort here zusammenhängen könnte. Ich habe jedoch keine Ahnung, wie ich das lösen könnte, wenn es sich tatsächlich um ein Serialisierungsproblem handelt.
Ich folge dem Code in this Buch von ihnen so, also würde ich annehmen, dass dies zumindest irgendwann funktioniert haben sollte?
FNNode auch einen Fall, Klasse sein muss, es sei denn, denke ich. – eliasah
Leider bekomme ich das: "Fehler: Fallklasse Zutat hat Fall Vorfahre $ iwC. $ IwC.FNNode, aber Fall-zu-Fall-Vererbung ist verboten. Um diese Einschränkung zu überwinden, verwenden Sie Extraktoren, um Muster auf Nicht-Blatt-Knoten Muster" – elelias
Können Sie versuchen, ob es hilft, FNNode Serializable erweitern zu lassen? –