Преобразование IndexedSequence [Map [String, Map [String, Int]]] в Map [String, Map [String, Int]] в Scala - PullRequest
0 голосов
/ 19 марта 2019

Я новичок в Scala, и у меня есть случай, когда я пытаюсь извлечь определенный столбец в кадре данных и передать его другому методу для дальнейшей обработки.

В этом случае я могу получить значения столбца в виде строки. Я могу сделать одно из двух:

  1. Преобразовать строку в карту [String, Map [String, Int]]

  2. Преобразовать IndexedSequence [Map [String, Map [String, Int]]] в Map [String, Map [String, Int]]

Значение в моем фрейме данных выглядит следующим образом:

[endGoal -> [a -> 10, b -> 10], max -> [a -> 30, b -> 30]]

Фрагмент кода, который я пытаюсь использовать для преобразования строки в Map [String, Map [String, Int]], выглядит следующим образом:

val map = recordArray(33) //Got the String
//Converting it to IndexedSequence[Map[String, Map[String, Int]]]
val result = for (line <- map; array = map.split(",").map(_.trim))
          yield Map(array.head -> array.tail.map(x => {val y = x.split(":"); (y(0).toString, y(1).toInt)}).toMap)

Но приведенный выше код помогает мне преобразовать его только в IndexedSequence [Map [String, Map [String, Int]]]

Я застрял в преобразовании его в Map [String, Map [String, Int]]. Не могли бы вы объяснить мне пример того, как получить значение в требуемом типе?

Спасибо.

1 Ответ

0 голосов
/ 19 марта 2019

По сути, я использовал неправильный подход для решения проблемы .. Мой плохой .. Я пытался сделать что-то вроде этого:

data.foreachPartition { rddpartition =>
    rddpartition.foreach { record =>
        var recordString = record.mkString(“,”)
      var recordArray = recordString.split(“,”)

Вот где я в итоге получил строку, а затем застрял, пытаясь преобразовать строку в Map [String, Map [String, Int]], и в итоге получил IndexedSequence [Map [String, Map [String, Int] ]].

Найдено 2 решения:

  1. Из того, что я пробовал выше, добавив:

    result.toList.flatten.toMap
    

преобразует IndexedSequence [Map [String, Map [String, Int]]] в Map [String, Map [String, Int]]

  1. Я должен напрямую получить карту [String, Map [String, Int]] из кадра данных, выполнив следующее:

    data.foreachPartition { rddpartition =>
    rddpartition.foreach { record =>
        val uid = record.getAs[String]("uid")
        val advertiserId = record.getAs[String]("advertiserId")
        val time = record.getAs[Long]("time")
        val map = record.getAs[Map[String, Map[String, Int]]]("map")
        val crossDeviceUsers = record.getAs[mutable.WrappedArray[String]]("crossDeviceUsers")
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...