可以在spark udf中使用通用案例类吗?

时间:2018-02-23 06:53:48

标签: scala apache-spark reflection

我是新来的火花。我想将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会有帮助吗?有什么建议可以解决这个问题吗?

谢谢!

0 个答案:

没有答案