如何从 json 行文件读取到具有 immutable.HashMap 的数据集?

How do I read from a json-lines file into a Dataset with an immutable.HashMap?

我有以下 类,

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}]]}

我在 运行 代码时收到以下错误:

failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 331, Column 75: No applicable constructor/method found for actual parameters "java.lang.String, boolean, double, scala.collection.immutable.Map"; candidates are: "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,这也会失败。