我是新来的火花。我想将spark数据帧行转换为case类,但是某些字段是动态的,并且无法事先确定数据类型。所以我想使用一些通用案例类。
case class Property[T: ClassTag](val value: T)
case class PropertyList(d: Map[String, Property[_]])
case class RowHolder(val id: Option[String] = None,
val properties: Option[PropertyList]= None)
udf {row => RowHolder(id = row.getAs[String]("id")}
似乎Spark在识别泛型类型时遇到问题并将其转换为架构,因为我得到了matcherror
Exception in thread "main" scala.MatchError: Property[_] (of class scala.reflect.internal.Types$ExistentialType)
at org.apache.spark.sql.catalyst.ScalaReflection$class.getConstructorParameters(ScalaReflection.scala:838)
这与spark type erasure
有关吗? custom serialization
会有帮助吗?有什么建议可以解决这个问题吗?
谢谢!