具有特征

时间:2016-10-13 09:46:31

标签: scala apache-spark dataset

我正在构建一个数据集,其中每个记录都映射到一个案例类(例如 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]

答案显而易见(不支持,未来的版本),但也许我忽略了什么?

1 个答案:

答案 0 :(得分:4)

编码器还没有恕我直言,但您可以使用Encoders.kryo[CustomDataEntry with Geo]作为编码器解决方法。