[英]Spark 2.0 Dataset Encoder with trait
我正在构建一个数据集,其中每个记录都映射到一个case类(例如,带有基本类型的CustomDataEntry )。
val dataset = spark.read (...) .as[CustomDataEntry]
到现在为止还挺好
现在我正在编写一个带有CustomDataEntry数据集的转换器,进行一些计算并添加一些新列,例如。 找到纬度和经度并计算geohash
我的CustomDataEntry现在有一个属性/列( geohash ),它在case类中不存在,但存在于Dataset中。 再次,这工作正常,但似乎不好, type safe
(如果使用编码器甚至可以)。
我可以在我的case类中将它添加为Option字段,但这看起来很混乱,而不是composabl。 一个更好的方法似乎我应该在CustomDataEntry上混合一些特征
例如
trait Geo{
val geohash:String
}
然后将数据集作为
dataset.as[CustomDataEntry with Geo]
这不行
错误:(21,10)无法找到存储在数据集中的类型的编码器。 导入spark.implicits支持原始类型(Int,String等)和产品类型(case类)。在将来的版本中将添加对序列化其他类型的支持。 .as [带有Geo的CustomDataEntry]
答案似乎很明显(不支持,未来的版本),但也许我忽略了什么?
编码器还没有恕我直言,但您可以使用Encoders.kryo[CustomDataEntry with Geo]
作为编码器解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.