Работают ли пользовательские функции (UDF) в Spark Run параллельно на рабочих узлах кластера? - PullRequest
0 голосов
/ 09 октября 2019

Давайте предположим, что я создал функцию в python, поэтому поднял число до степени 2:

def squared(s):
  return s * s

И затем я зарегистрировал функцию в Spark session, как показано ниже:

spark.udf.register("squaredWithPython", squared)

затем, когда я вызываю UDF в Spark SQL как:

spark.range(1, 20).registerTempTable("test")
%sql select id, squaredWithPython(id) as id_squared from test

Тогда будет ли функция squaredWithPython выполняться на рабочих узлах кластера, если данные распределены в рабочей памяти? Если да, то для чего используется векторизация UDF? И в чем разница между UDF и vectorized UDF?

Аналогично для использования UDF с кадрами данных.

Обратите внимание, что код извлекается из: https://docs.databricks.com/spark/latest/spark-sql/udf-python.html

Любая помощь очень ценится! *

1 Ответ

0 голосов
/ 22 октября 2019

Разница между UDF и Pandas_UDF заключается в том, что функция UDF будет применять функцию по одной строке за фрейм данных или таблицу SQL. Кроме того, каждая строка за раз будет сериализована (преобразована в объект python) до применения функции python. С другой стороны, Pandas_UDF преобразует весь фрейм данных искры в фрейм данных или ряд Pandas, используя Apache Arrow (намного дешевле, чем сериализация), а затем применяет функцию python к фрейму данных pandas. Функция будет векторизована, потому что входными данными является кадр данных / серия Pandas, а не одна строка за раз.

...