2016-12-08 9 views
5

Spark DataSetカラムに代数データ型(ADT)(つまりスカラ密封特性の階層)を保存する場合は、どのような方法が最適ですか?例えばSpark DataSetカラムにADT /密封特性階層をエンコードする

、私は葉の種類は、異なる種類のデータ保存ADTがある場合:

sealed trait Occupation 
case object SoftwareEngineer extends Occupation 
case class Wizard(level: Int) extends Occupation 
case class Other(description: String) extends Occupation 

構築するための最善の方法をいただきました:

org.apache.spark.sql.DataSet[Occupation] 

答えて

4

TLを、DRあり Spark SQL/Datasetの実装を受けてすぐには良い解決策ではありませんが、近い将来に1つが存在する可能性は低いです。

あなたは、一般的なkryoまたはjavaエンコーダ

val occupation: Seq[Occupation] = Seq(SoftwareEngineer, Wizard(1), Other("foo")) 
spark.createDataset(occupation)(org.apache.spark.sql.Encoders.kryo[Occupation]) 

を使用するが、実際にはほとんど役立ちますすることができます。

UDTのAPIそれはプライベートであり、(あなたが実装例を見るためにo.a.s.ml.linalg.VectorUDTを確認することができます)非常に多くの定型コードが必要です(1.62.02.1-SNAPSHOTスパーク)今のよう別の可能なアプローチを提供します。

関連する問題