2017-08-08 6 views
0

genannt Ich teilte meine RDDs zwischen Jobs mit Art von CassandraRow, aber ich bin jetzt mehrere RDDs zusammen, so dass eine Fall-Klasse mehr Sinn macht.Cast von Fallklasse RDD

Ich speichere meine RDD wie unten & dann abrufen Sie es in einem neuen Job. Dies funktionierte gut mit Typ CassandraRow. CData ist die gleiche Fallklasse in beiden Jobs.

runtime.namedObjects.update("rdd:session", NamedRDD(mergedRDD, forceComputation = false, storageLevel = StorageLevel.MEMORY_ONLY)) 
// val mergedRDD: RDD[CData] 

val NamedRDD(dbDayRDD, _, _) = runtime.namedObjects.get[NamedRDD[CData]]("rdd:session").get 

Promos Job Failed { 

    "duration": "0.545 secs", 

    "classPath": "spark.jobserver.Promos", 

    "startTime": "2017-08-08T18:07:02.131Z", 

    "context": "dailycontext", 

    "result": { 

    "message": "java.lang.ClassCastException: spark.jobserver.SessionNew$CData$3 cannot be cast to spark.jobserver.Promos$CData$3", 


    "errorClass": "java.lang.Throwable", 

Antwort

0

Es stellt sich heraus, dass Sie keine Fallklassen in einer neuen Datei neu deklarieren können. Der genaue Pfad muss übereinstimmen, damit sie als gleich betrachtet werden, oder sie versucht ihn selbst zu konvertieren, was nicht funktioniert. Ich habe gerade alle meine Case-Klassendefinitionen in eine neue Datei verschoben und dann diese Datei in jeden Job importiert.