Spark - объединение нескольких столбцов карты с общими ключами - PullRequest
0 голосов
/ 27 января 2020

У меня есть ряд столбцов схем Map[(Int, Int), Row] и Map[(Int, Int), String], карты с ключами int-tuple и некоторыми данными (строка или структура). Я пытаюсь взять эти столбцы, извлечь данные и вставить их в один столбец на основе ключей через UDF, как показано ниже.

case class PersonConcept(field1: Int, field2: Int, field3: String,
              field4: String, field5: String)

private def mergeMaps: UserDefinedFunction = {
  val f = (keyedData: Map[Row, Row], keyedNames: Map[Row, String],
                                keyedOccupations: Map[Row, String]) => {
    val intKeyedData = keyedData.map {
      case (row, data) =>
        (row.getInt(0), row.getInt(1)) -> data
    }
    val intKeyedNames = keyedNames.map {
      case (row, data) =>
        (row.getInt(0), row.getInt(1)) -> data
    }
    val intKeyedOccupations = keyedOccupations.map {
      case (row, data) =>
        (row.getInt(0), row.getInt(1)) -> data
    }
    intKeyedData
      .map {
        case (k, v) => {
          val value =
            PersonConcept(v.getInt(0),
              v.getInt(1),
              v.getString(2),
              intKeyedOccupations(k), // <--- Grabbing occupation
              intKeyedNames(k))       // <--- Grabbing name
          (k, value)
        }
      }
  }
  udf(f)
}

Я знаю, что каждая карта содержит точно такой же набор ключей. Тем не менее, я сталкиваюсь с NoSuchElementException.

Caused by: java.util.NoSuchElementException: key not found: (24,75)
    at scala.collection.MapLike$class.default(MapLike.scala:228)
    at scala.collection.AbstractMap.default(Map.scala:59)
    at scala.collection.MapLike$class.apply(MapLike.scala:141)
    at scala.collection.AbstractMap.apply(Map.scala:59)

. UDF отлично работает, когда набор данных состоит только из одной строки или одного раздела, что наводит меня на мысль, что это как-то связано с областью действия переменной скросс-раздела или закрытие (http://spark.apache.org/docs/latest/rdd-programming-guide.html#understanding -closures- ). Что я не понимаю, что может быть причиной этого, и есть ли реальный способ сделать это, используя эту модель данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...