将sparkDataframe转换为scalaMap集合

sauutmhj  于 2021-05-17  发布在  Spark
关注(0)|答案(3)|浏览(546)

我有如下的Dataframe。

  1. scala> df.show
  2. +---+-------+
  3. |key| count|
  4. +---+-------+
  5. | 11| 100212|
  6. | 12| 122371|
  7. | 13| 235637|
  8. | 14| 54923|
  9. | 15| 9785|
  10. | 16| 5217|
  11. +---+-------+

我正在研究如何将它转换成下面这样的Map。请帮忙。

  1. Map(
  2. "11" -> "100212",
  3. "12" -> "122371",
  4. "13" -> "235637",
  5. "14" -> "54923",
  6. "15" -> "9785",
  7. "16" -> "9785"
  8. )
w80xi6nr

w80xi6nr1#

使用 map 函数转换类型的列 map &收集数据。检查以下代码。

  1. scala> df.show(false)
  2. +---+------+
  3. |key|value |
  4. +---+------+
  5. |11 |100212|
  6. |12 |122371|
  7. |13 |235637|
  8. |14 |54923 |
  9. |15 |9785 |
  10. |16 |5217 |
  11. +---+------+
  12. scala> df
  13. .select(map(df.columns.map(col):_*).as("map"))
  14. .as[Map[String,String]]
  15. .collect()
  16. .reduce(_ ++ _)
  17. res48: Map[String,String] = Map(12 -> 122371, 15 -> 9785, 11 -> 100212, 13 -> 235637, 16 -> 5217, 14 -> 54923)
展开查看全部
ijnw1ujt

ijnw1ujt2#

  1. df.collect().map(row => row.getAs[String](0) -> row.getAs[String](1)).toMap
krcsximq

krcsximq3#

你可以用 collectAsMap 方法。

  1. val result = data.as[(String, String)].rdd.collectAsMap()
  2. // result: Map[String, String] = Map(12 -> 122371, 15 -> 9785, 11 -> 100212, 14 -> 54923, 16 -> 5217, 13 -> 235637)

顺便说一句,记住收集所有数据到驱动程序是一个昂贵的操作,可能会导致内存不足的错误,请确保数据是小之前。

相关问题