TL; DR В настоящее время нет хорошего решения, и, учитывая реализацию Spark SQL / Dataset
, маловероятно, что в обозримом будущем будет один.
Вы можете использовать общий kryo
или java
encoder
val occupation: Seq[Occupation] = Seq(SoftwareEngineer, Wizard(1), Other("foo"))
spark.createDataset(occupation)(org.apache.spark.sql.Encoders.kryo[Occupation])
, но вряд ли применим на практике.
API UDT предоставляет другой возможный подход, как сейчас (Spark 1.6
, 2.0
, 2.1-SNAPSHOT
) он является частным и требует довольно большого шаблона кода (вы можете проверить o.a.s.ml.linalg.VectorUDT
, чтобы увидеть пример реализации).