![](/img/trans.png)
[英]Scala deserialization of custom scala object with play-json library
[英]Apache Spark Scala with Play-json Validation
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]的数据集的输出,但实际输出是java.lang.UnsupportedOperationException:不支持Container类型的架构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.