2017-12-25 32 views
1

이미 spark.implicits._을 가져온하지만 아직도 내가 얻을 오류"데이터 집합에 저장된 형식의 인코더를 찾을 수 없습니다"와 함께 사례 클래스를 사용하여 DataFrame을 통한 매핑이 실패하는 이유는 무엇입니까?

Error:(27, 33) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases.

내가 좋아하는 경우 클래스가 :

case class User(name: String, dept: String) 

내가 사용하여 데이터 집합 Dataframe 변환 오전 :

val ds = df.map { row=> User(row.getString(0), row.getString(1) } 

또는

val ds = df.as[User] 

또한 동일한 코드를 시도 할 때 Spark-shell 오류가 발생합니다. IntelliJ를 통해 실행하거나 작업을 제출할 때만 오류가 발생합니다.

이유가 무엇입니까?

답변

1

사례 클래스의 이동 선언이 범위를 벗어났습니다!

코드 구조는 될 것 같은 :

package main.scala.UserAnalytics 

// case class *outside* the main object 
case class User(name: string, dept: String) 

object UserAnalytics extends App { 
    ... 
    ds = df.map { row => User(row.getString(0), row.getString(1)) } 
}