我正在构建一个数据集,其中每个记录都映射到一个案例类(例如,带有原始类型的CustomDataEntry )。
val dataset = spark.read (...) .as[CustomDataEntry]到目前一切尚好
现在,我正在编写一个转换器,它使用CustomDataEntry的数据集,进行一些计算,并添加一些新的列(例如。查找纬度和经度并计算地理哈希
我的CustomDataEntry现在有一个属性/列(Geo散列),它是,不在case类中,而是存在于Dataset中。同样,这也很好,但似乎不太好,而不是type safe (如果这是可能的编码器)。
我可以在case类中添加这个选项字段,但这看起来很混乱,而不是composabl。一个更好的方法似乎是我应该在CustomDataEntry上混合一些特性
例如:
trait Geo{
val geohash:String
},然后将数据集返回为
dataset.as[CustomDataEntry with Geo]这不管用
错误:(21,10)无法找到存储在数据集中的类型的编码器。导入spark.implicits._支持基本类型(Int、String等)和Product (case类),以便在以后的版本中添加其他类型的序列化支持。.asCustomDataEntry与Geo
答案似乎很明显(不支持,未来的版本),但也许我忽略了什么?
发布于 2016-10-13 10:26:37
编码器还没有IMHO,但您可以使用Encoders.kryo[CustomDataEntry with Geo]作为编码器的解决方案。
https://stackoverflow.com/questions/40017603
复制相似问题