我有以下类,
case class myClass (a: String, b: Boolean, c: Double, d: HashMap[String, E])
case class E (f: String, g: Int)
以下代码从 JSON 文件加载到Dataset[myClass]
中,
mySparkSession.read.schema(Encoders.product[myClass].schema).json("myData.json").as[myClass]
还有一个 .json(-lines( 文件,其中包含如下行:
{"a": "text","b": "false","c": 123456.78,"d": ["text", [{"f": "text"},{"g": 1}]]}
运行代码时出现以下错误:
编译失败:org.codehaus.commons.compiler.CompileException: 文件"生成.java",第 331 行,第 75 列:不适用 为实际参数"java.lang.String, boolean, double, scala.collection.immutable.Map";候选人是: "my.package.name.objname$myClass(java.lang.String, boolean, double, scala.collection.immutable.HashMap(">
我该如何解决这个问题?
试试这个:
import scala.collection.immutable.Map
case class myClass (a: String, b: Boolean, c: Double, d: Map[String, E])
我发现使用df.as[myClass]
可能会对使用哪种类型的Map
有点挑剔。如果没有import
,它默认为scala.collection.Map
,这也将失败。