繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM