Ich habe two case class
geschrieben, die Base abstract class
erweitert. Ich habe zwei Listen jeder Klasse (listA
und listB
). Wenn ich diese beiden Listen zusammenführen möchte, kann ich die endgültige Liste nicht in Apache Spark 1.6.1 Dataset konvertieren.Keine Java-Klasse entsprechend Produkt mit Serializable mit Base gefunden
abstract class Base
case class A(name: String) extends Base
case class B(age: Int) extends Base
val listA: List[A] = A("foo")::A("bar")::Nil
val listB: List[B] = B(10)::B(20)::Nil
val list: List[Base with Product with Serializable] = listA ++ listB
val result: RDD[Base with Product with Serializable] = sc.parallelize(list).toDS()
Apache Spark diese Ausnahme steigen:
A needed class was not found. This could be due to an error in your runpath. Missing class: no Java class corresponding to Base with Product with Serializable found
java.lang.NoClassDefFoundError: no Java class corresponding to Base with Product with Serializable found
at scala.reflect.runtime.JavaMirrors$JavaMirror.typeToJavaClass(JavaMirrors.scala:1299)
at scala.reflect.runtime.JavaMirrors$JavaMirror.runtimeClass(JavaMirrors.scala:192)
at scala.reflect.runtime.JavaMirrors$JavaMirror.runtimeClass(JavaMirrors.scala:54)
at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$.apply(ExpressionEncoder.scala:50)
at org.apache.spark.sql.SQLImplicits.newProductEncoder(SQLImplicits.scala:41)
Wenn ich will von list
Spark-RDD erstellen keine Ausnahme werfen, aber wenn ich RDD konvertieren mit toDS()
Verfahren dieser Stand der Ausnahme dataSet wird werfen.
Ich bin nicht sicher Mixins sind noch mit DataSet-Encoder unterstützt. –