Конвертировать фрейм данных в хэш-карту, используя Spark Scala - PullRequest
2 голосов
/ 22 апреля 2019

Мой фрейм данных выглядит так:

+-------------------+-------------+
|        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?

1 Ответ

2 голосов
/ 22 апреля 2019

Давайте создадим некоторые данные:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...