«Отдел карт» без UDF в Spark SQL - PullRequest
0 голосов
/ 09 ноября 2018

Мы используем пользовательскую функцию (UDF) для выполнения «деления карты» на два столбца MapType в наборе данных. «Подразделение карты» означает создание новой карты с ключами, которые являются общими для делимого и делителя, и значениями, которые являются значением дивиденда, деленным на значение делителя для этого ключа. Код Scala для создания UDF показан ниже.

def mapDivision(dividend: Map[String, Double], divisor: Map[String, Long]): Map[String, Double] = {
  var result = Map.empty[String, Double]
  for ((key, value) <- dividend) if (divisor.contains(key)) result += (key -> value / divisor(key))
  result
}

Мы хотели бы выполнить эту операцию без использования этой UDF, потому что UDF не могут быть оптимизированы с помощью Catalyst Engine и работают медленно. Мы попытались выполнить эту операцию, используя только Spark SQL API, чтобы добиться повышения производительности по сравнению с UDF, но не смогли найти хороший способ сделать это, который работает и на самом деле не медленнее из-за обходных соединений и т.д.

Кто-нибудь знает быстрый и простой способ выполнения этой операции с использованием Spark SQL API?

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