scala - 带有 Play-json 验证的 Apache Spark Scala
问题描述
java.lang.UnsupportedOperationException:不支持类型 [trait object] 的架构
trait Container {
def aa: String
def bb: Int
}
case class First(aa: String, bb: Int) extends Container
case class Second(aa: String, bb: Int) extends Container
implicit val aaContainerFormat: Format[First] = Json.format[First]
implicit val bbContainerFormat: Format[Second] = Json.format[Second]
implicit def nodeContainerReads: Reads[Container] =
try {
Json.format[First].map(x => x: Container) or
Json.format[Second].map(x => x: Container)
} catch {
case e: Exception => Reads {
case _ => JsError(JsonValidationError("Cannot De-serialize value."))
}
}
implicit def nodeContainerWrites = new Writes[Container] {
override def writes(node: Container): JsValue = node match {
case a: First => Json.toJson(a)
case b: Second => Json.toJson(b)
case _ => Json.obj("error" -> "wrong Json")
}
}
// Example Usage....
val spark: SparkSession = SparkSession.builder.appName("Unit Test").getOrCreate()
val js: Container = First("unit", "test")
spark.createDataFrame(Seq(js))
我期望 [Container Object] 的 Datasets 的输出,但实际输出是 java.lang.UnsupportedOperationException:不支持 Container 类型的模式。
解决方案
推荐阅读
- java - 如何动态实例化一个类型在运行时决定的类
- python - 处理异常的不同返回类型
- r - 如何按位于 R 中的列中的次数拆分行?
- azure-sql-database - 我们如何检查某人在 Azure SQL 中运行查询的频率?
- android - 我无法构建 Flutter apk,因为访问“FlutterEngine”类
- google-chrome-extension - 无法从 Chrome 扩展文件系统加载 html 文件
- .htaccess - htaccess - 隐藏文件扩展名并仅保留变量的值
- vb.net - 使用 .NET 5 的 Visual Basic 项目的高 DPI 模式错误
- reactjs - 将属性添加到 React Typescript 接口
- windows - 'mongoimport' 不是内部或外部命令、可运行程序或批处理文件