首页 > 解决方案 > 如何将数据框值转换为 Map[String,List[String]]?

问题描述

我想将下面的数据框转换为 Map[String,List[String]]。我已更改初始数据框以获取列表格式的名称列(使用collect_list),但我无法将其转换为Map[String,List[String]].

数据框

+---------+-------+
|City     |  Name |
+---------+-------+
|Mumbai   |[A,B]  |
|Pune     |[C,D]  |
|Delhi    |[A,D]  |
+---------+-------+

预期输出:

Map(Mumbai -> List(A,B), Pune -> List(C,D), Delhi-> List(A,D))

标签: dataframeapache-spark

解决方案


您可以转换为 rdd 并收集为 Map 如下

val df = Seq(
  ("Mumbai", List("A", "B")),
  ("Pune", List("C", "D")),
  ("Delhi", List("A", "D"))
).toDF("city", "name")

val map: collection.Map[String, List[String]] =  df.rdd
  .map(row => (row.getAs[String]("city"), row.getAs[List[String]]("name")))
  .collectAsMap()

希望这可以帮助!


推荐阅读