当前位置: 首页 > 知识库问答 >
问题:

如何映射在火花/scala中保存映射的数据集

商和颂
2023-03-14

我在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()

我想在每个值的末尾加上“”,结果将是一个数据类型的数据集,如下所示:

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

谢谢Nir

共有1个答案

徐茂材
2023-03-14
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 +") }
  )
 类似资料:
  • 我是新的火花,请帮助我这一点。

  • 我有一个列为col1、col2、col3的数据帧。col3是下面定义的映射[String,String] 我按col1、col2进行分组,并使用collect_list进行聚合,以获得映射数组并存储在col4中。 然而,我希望将col4作为一个单独的映射,并将所有映射合并。目前我有: 预期输出 使用udf是否理想? 感谢您的帮助。谢谢

  • Scala 集合 Map(映射)是一种可迭代的键值对(key/value)结构。 所有的值都可以通过键来获取。 Map 中的键都是唯一的。 Map 也叫哈希表(Hash tables)。 Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。 默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collecti

  • 前缀映射,后缀映射和缓存映射 通过 names.NewPrefixMapper(names.SnakeMapper{}, "prefix") 可以创建一个在 SnakeMapper 的基础上在命名中添加统一的前缀,当然也可以把 SnakeMapper{} 换成 SameMapper 或者你自定义的 Mapper。 例如,如果希望所有的表名都在结构体自动命名的基础上加一个前缀而字段名不加前缀,则可以

  • 我有以下代码: 如果我想迭代Map,上面的代码工作得很好。但是现在我有这样的东西。 我想在映射中遍历映射,并获取它的键和值。我想得到key1、value1、key2、value2、key3、value3的值,依此类推。那我该怎么做呢?

  • 考虑一个代码: 为什么r可以用[String,TwoCaseClass]类型的产品序列化,而不是用[String,TwoCaseClass]类型的产品序列化? 如何只映射左值?