【问题标题】:How to map over a Dataset that holds a map in spark/scala如何映射在 spark/scala 中保存地图的数据集
【发布时间】:2017-12-15 11:24:49
【问题描述】:

我在 spark 中有一个数据集,其中有一列,此列是 Map[String, Any]。我想逐行映射数据集,然后逐个键映射映射列,操作每个键的值并使用新数据生成与前一个相同类型的新数据集。

例如:

case class Data(column: Map[String, Any])
val ds: Dataset[Data] = Seq(Data(Map(("name","Andy"),("address","Street Name 1"))),Data(Map(("name","John"),("city","NYC")))).toDS()

而且我想在每个值的末尾加上“+”,所以结果会是一个Data类型的Dataset,如下:

name -> Andy +, address -> Street Name 1 +
name -> John +, city -> NYC +

谢谢 尼尔

【问题讨论】:

  • 你没有收到No Encoder found for Any吗?

标签: scala apache-spark


【解决方案1】:
val result =
  ds.map(data =>
    Data(data.column.map { case (key, value) => (key -> s"$value +") }
  )

val result = 
  ds.map(
    data => data.copy(column = data.column.map { case (key, value) => (key -> s"$value +") }
  )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2015-12-28
    • 2018-10-07
    相关资源
    最近更新 更多