我正在构建一个数据集,其中每个记录都映射到一个案例类(例如 CustomDataEntry 和原始类型)。
val dataset = spark.read (...) .as[CustomDataEntry]
到目前为止一切顺利
现在我正在编写一个变换器,它使用 CustomDataEntry的获取数据集,进行一些计算并添加一些新列,例如。找到纬度和经度并计算 geohash
我的 CustomDataEntry 现在有一个属性/列( geohash ),它在案例类中不,但存在于数据集中。再一次这很好,但似乎不好,而不是type safe
(如果编码器甚至可以这样做的话)。
我可以在我的case类中添加它作为Option字段,但这看起来很混乱,而不是composabl。一个更好的方法似乎我应该在 CustomDataEntry
上混合一些特性e.g。
trait Geo{
val geohash:String
}
然后将数据集作为
返回dataset.as[CustomDataEntry with Geo]
这不起作用
错误:(21,10)无法找到存储在数据集中的类型的编码器。 基元类型(Int,String等)和产品类型(案例类) 通过导入spark.implicits._支持序列化 其他类型将在未来版本中添加。 .as [CustomDataEntry with Geo]
答案显而易见(不支持,未来的版本),但也许我忽略了什么?
答案 0 :(得分:4)
编码器还没有恕我直言,但您可以使用Encoders.kryo[CustomDataEntry with Geo]
作为编码器解决方法。