具有特征的 Spark 2.0 数据集编码器

Tom*_*ous 5 scala dataset apache-spark

我正在构建一个数据集,其中每个记录都映射到一个案例类(例如带有原始类型的CustomDataEntry)。

val dataset = spark.read (...) .as[CustomDataEntry]
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好

现在我正在编写一个带有CustomDataEntry 的数据集的转换器,进行一些计算并添加一些新列,例如。找到经纬度并计算geohash

我的CustomDataEntry现在有一个属性/列(geohash),它不存在于案例类中,但存在于数据集中。这再次工作正常,但似乎不太好type safe(如果编码器甚至可以这样做)。

我可以将它添加为案例类中的 Option 字段,但这看起来很混乱,而不是可组合的。更好的方法似乎是我应该在CustomDataEntry上混合一些特征

例如

trait Geo{
    val geohash:String
}
Run Code Online (Sandbox Code Playgroud)

然后将数据集返回为

dataset.as[CustomDataEntry with Geo]
Run Code Online (Sandbox Code Playgroud)

这行不通

错误:(21, 10) 无法找到存储在数据集中的类型的编码器。导入 spark.implicits 支持原始类型(Int、String 等)和产品类型(case 类)。未来版本中将添加对序列化其他类型的支持。.as[带地理信息的自定义数据条目]

答案似乎很明显(不支持,未来版本),但也许我忽略了一些东西?