2017-03-22 6 views
1

scala.collection.SortedMapがシリアル化されていないようですか?Spark Datasetで並べ替えられた非シリアライズ可能なエラー

簡単なコードの例:

case class MyClass(s: scala.collection.SortedMap[String, String] = SortedMap[String, String]()) 

object MyClass { 
    def apply(i: Int): MyClass = MyClass() 
} 

import sparkSession.implicits._ 

List(MyClass(1), MyClass()).toDS().show(2) 

が返されます:一方

+-----+ 
| s| 
+-----+ 
|Map()| 
|Map()| 
+-----+ 

は、)実行時に、無残に失敗します(取る:

List(MyClass(1), MyClass()).toDS().take(2) 

ERRORのコード生成を。 CodeGenerator:コンパイルに失敗しました:org.codehaus.commons.compiler.CompileException:ファイル 'generated.java'、行116、Colum n 100:実際のパラメータ "scala.collection.Map"に対して該当するコンストラクタ/メソッドが見つかりませんでした。

答えて

0

SparkのサポートされているScalaタイプ(2.1.0以降)には、scala.collection.SortedMapは含まれていません。 )。サポートされているタイプのリストはここで見つけることができます:

https://spark.apache.org/docs/latest/sql-programming-guide.html#data-types

リンクが示すように、マップのサポートされているタイプは、scala.collection.Mapので、次のような作品です。

case class MyClass(s: scala.collection.Map[String, String] = SortedMap[String, String]()) 


scala> spark.createDataset(MyClass() :: Nil).collect() 
res: Array[MyClass2] = Array(MyClass(Map())) 
関連する問題