Spark 如何在 RDD 的 Hashmap 中添加值?

Spark How to add value in a Hashmap from RDD?

我有以下数据框

val df = phDF.groupBy("name").agg(collect_list("message").as("Messages"))

我低于输出

+-----------+--------------------+
|name       |Messages            |
+-----------+--------------------+
|     Test1 |['A','B','C']       |
|     Test2 |['A','B','C','D']   |
|     Test3 |['A','B']           |
+-----------+--------------------+

现在我想将上面的名称(作为键)和消息(作为值)添加到哈希图中。

我使用以下方法将其转换为 RDD,但没有得到任何线索

var m = scala.collection.mutable.Map[String, String]()
val rdd = df.rdd.map(_.mkString("##"))
val rdd1 = rdd.map(s=>s.split("##"))
val rdd2 = rdd1.map(ele=>m.put(ele(0),ele(1)))
print(m)   // Output:- HashMap()

如上所述,当我尝试打印 hashMap 然后我变得空白

有谁能帮助我如何将这个值存储在 HashMap 中,如下所示?

Map("测试1" -> "['A','B','C']" ,"测试2" -> "['A','B','C','D']","测试 3" -> "['A','B']")

鉴于您的初始数据:

val df = Seq(
  ("test1", Seq("A", "B", "C")),
  ("test2", Seq("A", "B", "C", "D")),
).toDF("name", "Messages")

您可以使用map_from_entries方法将其转换为地图:

val asMapDf = df.select(
  map_from_entries(
    array(
      struct("name", "Messages")
    )
  )
)

请注意,您创建了一个包含两列的 struct 项目的数组。数组中的每个条目都成为映射中的一个条目。这给你:

+-----------------------+
|map                    |
+-----------------------+
|{test1 -> [A, B, C]}   |
|{test2 -> [A, B, C, D]}|
+-----------------------+