복붙노트

[SCALA] 스파크 데이터 세트 컬럼 내로 ADT / 밀봉 특성 계층을 인코딩

SCALA

스파크 데이터 세트 컬럼 내로 ADT / 밀봉 특성 계층을 인코딩

나는 불꽃 데이터 집합 열 내에서 대수 데이터 타입 (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]

해결법

  1. ==============================

    1.TL; DR 지금은 좋은 해결책이 없다, 주어진 스파크 SQL / 데이터 집합 구현, 가까운 장래에 하나있을 것이다 않을 수 있습니다.

    TL; DR 지금은 좋은 해결책이 없다, 주어진 스파크 SQL / 데이터 집합 구현, 가까운 장래에 하나있을 것이다 않을 수 있습니다.

    당신은 일반적인 kryo 또는 자바 인코더를 사용할 수 있습니다

    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.6, 2.0, 2.1-SNAPSHOT)를 제공합니다.

  2. from https://stackoverflow.com/questions/41030073/encode-an-adt-sealed-trait-hierarchy-into-spark-dataset-column by cc-by-sa and MIT license