Scala Spark数据集中的SortedMap不可序列化错误
scala.collection.SortedMap似乎不可序列化 简单代码示例:Scala Spark数据集中的SortedMap不可序列化错误,scala,apache-spark,apache-spark-dataset,Scala,Apache Spark,Apache Spark Dataset,scala.collection.SortedMap似乎不可序列化 简单代码示例: 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),
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()|
+-----+
另一方面,take()将在执行时惨遭失败:
List(MyClass(1), MyClass()).toDS().take(2)
错误codegen.CodeGenerator:未能编译:org.codehaus.commons.compiler.compileeException:文件'generated.java',第116行,第100列:未找到实际参数“scala.collection.Map”的适用构造函数/方法;候选项为:“com.caspida.algorithms.security.offline.exfilterationthreat.MyClass(scala.collection.SortedMap)”Spark支持的scala类型(从2.1.0开始)不包括scala.collection.SortedMap)。可在此处找到受支持类型的列表: 正如链接所建议的,支持的映射类型是
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()))
Spark支持的Scala类型(从2.1.0开始)不包括Scala.collection.SortedMap)。可在此处找到受支持类型的列表: 正如链接所建议的,支持的映射类型是
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()))