2016-05-02 4 views
3

スパークは、しかし、このコードはうまく動作します、次のコード行を配列[文字列]にマッピングする際にエンコーダがないのはなぜですか?

val digital2 = sqlContext.read.text("path").as[String] 
    .map(line => line.split(delimiter)) 
    .map(lineSplit => { 
     new MyType(lineSplit(0), lineSplit(1), lineSplit(2), lineSplit(3) 
     , lineSplit(4).toInt, lineSplit(5).toInt, lineSplit(6).toInt, lineSplit(7).toInt 
    ) 
    }) 

のために私のコンパイル時にエラー

Error:(49, 13) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing sqlContext.implicits._ Support for serializing other types will be added in future releases. 
    .map(line => line.split(delimiter)) 
     ^

を与えている私は何が起こっているかを、以下のいないよ

val digital = sqlContext.read.text("path").as[String] 
    .map(line => { 
     val lineSplit = line.split(delimiter) 
     new MyType(lineSplit(0), lineSplit(1), lineSplit(2), lineSplit(3) 
     , lineSplit(4).toInt, lineSplit(5).toInt, lineSplit(6).toInt, lineSplit(7).toInt 
    ) 
    } 

。誰か説明できますか?

答えて

2

最初の例では、.map(line => line.split(delimiter))Dataset[Array[String]]を返します。次に、Dataset[Array[String]]のエンコーダが必要です。しかし、このようなエンコーダは1.6.1で追加されました。古いSparkバージョンを使用すると、コンパイルできません。

関連する問題