具有特征的 Spark 2.0 数据集编码器
Posted
技术标签:
【中文标题】具有特征的 Spark 2.0 数据集编码器【英文标题】:Spark 2.0 Dataset Encoder with trait 【发布时间】:2017-02-22 09:03:03 【问题描述】:我正在构建一个数据集,其中每个记录都映射到一个案例类(例如 CustomDataEntry 与原始类型)。
val dataset = spark.read (...) .as[CustomDataEntry]
到目前为止一切顺利
现在我正在编写一个转换器,它采用带有 CustomDataEntry 的 的数据集,进行一些计算并添加一些新列,例如。找到纬度和经度并计算 geohash
我的 CustomDataEntry 现在有一个属性/列 (geohash),它不 存在于案例类中,但存在于数据集中.再次,这工作正常,但似乎不是很好,而不是 type safe
(如果这甚至可以使用编码器)。
我可以将此作为选项字段添加到我的案例类中,但这看起来很混乱,而不是可组合。一种更好的方法似乎是我应该在 CustomDataEntry
上混合一些特征例如
trait Geo
val geohash:String
然后将数据集返回为
dataset.as[CustomDataEntry with Geo]
这行不通
错误:(21, 10) 无法找到存储在数据集中的类型的编码器。 原始类型(Int、String 等)和产品类型(案例类) 通过导入 spark.implicits._ 支持序列化 其他类型将在以后的版本中添加。 .as[CustomDataEntry with Geo]
答案似乎很明显(不支持,未来版本),但也许我忽略了什么?
【问题讨论】:
【参考方案1】:编码器尚不存在,恕我直言,但您可以使用 Encoders.kryo[CustomDataEntry with Geo]
作为编码器解决方法。
【讨论】:
以上是关于具有特征的 Spark 2.0 数据集编码器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Scala Spark 中使用具有许多条件的“.withColumn”为数据集创建新列
如何从 Spark 2.0 中的 DataFrame 列创建数据集?