似乎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), MyClass()).toDS().show(2)
将返回:
+-----+
| s|
+-----+
|Map()|
|Map()|
+-----+
另一方面,take()在执行时会失败:
List(MyClass(1), MyClass()).toDS().take(2)
错误codegen.CodeGenerator:编译失败:org.codehaus.commons.compiler.CompileException:File' generated.java',第116行,第100列:找不到适用于实际参数的构造函数/方法& #34; scala.collection.Map&#34 ;;候选人是:" com.caspida.algorithms.security.offline.exfiltrationthreat.MyClass(scala.collection.SortedMap)"
答案 0 :(得分: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()))