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]}|
+-----------------------+
我有以下数据框
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]}|
+-----------------------+