2016-04-08 16 views
3

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?

+0

FNNode auch einen Fall, Klasse sein muss, es sei denn, denke ich. – eliasah

+0

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

+1

Können Sie versuchen, ob es hilft, FNNode Serializable erweitern zu lassen? –

Antwort

5

Diese feste Ihr Problem für mich:

class FNNode(val name: String) extends Serializable 
+0

das hat funktioniert, vielen Dank. – elelias

Verwandte Themen