【问题标题】:Spark 2.0 Dataset Encoder with trait具有特征的 Spark 2.0 数据集编码器
【发布时间】: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]

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

【问题讨论】:

    标签: scala apache-spark dataset


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2021-01-19
      • 2017-12-11
      • 2017-08-31
      • 2018-10-25
      • 2018-03-08
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多