scala - 使用 Spark Scala 将数据帧转换为 HashMap

标签 scala apache-spark apache-spark-sql

我的数据框如下所示:

+-------------------+-------------+
|        Nationality|    continent|
+-------------------+-------------+
|       Turkmenistan|         Asia|
|         Azerbaijan|         Asia|
|             Canada|North America|
|         Luxembourg|       Europe|
|             Gambia|       Africa|

我的输出应该如下所示:

Map(Gibraltar -> Europe, Haiti -> North America)

所以,我正在尝试将数据帧转换为

scala.collection.mutable.Map[String, String]()

我正在尝试使用以下代码:

    var encoder = Encoders.product[(String, String)]
    val countryToContinent = scala.collection.mutable.Map[String, String]()
    var mapped = nationalityDF.mapPartitions((it) => {
        ....
        ....
        countryToContinent.toIterator
    })(encoder).toDF("Nationality", "continent").as[(String, String)](encoder)

    val map = mapped.rdd.groupByKey.collect.toMap

但是结果图有以下输出:

Map(Gibraltar -> CompactBuffer(Europe), Haiti -> CompactBuffer(North America))

如何在没有 CompactBuffer 的情况下获取 HashMap 结果?

最佳答案

让我们创建一些数据:

val df = Seq(
("Turkmenistan", "Asia"), 
("Azerbaijan", "Asia"))
.toDF("Country", "Continent")

尝试先映射到元组中,然后收集到映射中:

df.map{ r => (r.getString(0), r.getString(1))}.collect.toMap

输出:

scala.collection.immutable.Map[String,String] = Map(Turkmenistan -> Asia, Azerbaijan -> Asia)

关于scala - 使用 Spark Scala 将数据帧转换为 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786726/

相关文章:

scala - 控制结构化 Spark Streaming 的微批处理

scala - GraphX 是如何在内部遍历 Graph 的?

hadoop - Spark 1.2 : Write single record into multiple files (blacklisted)

java - Apache Spark 我在这里坚持了什么?

java - 交叉口在 apache Spark 中不起作用

scala - Scalatra 或 Play 框架的 OAuth2 提供程序

java - 如何减少 Scala (/Java) 的启动开销?

performance - Apache Spark : map vs mapPartitions?

apache-spark - spark2.xx 是否支持 delta lake

apache-spark - 无法解析...给定的输入列