Где я должен зарегистрировать искровой UDF для универсальной функции - PullRequest
0 голосов
/ 13 марта 2019

У меня есть общая функция, которая выполняется несколько раз для разных параметров. Этот метод использует UDF для манипулирования датой и годом. Является ли хорошей практикой регистрация UDF в методе, где он вызывается? Если нет, то какова лучшая практика и какова производительность при повторной регистрации одного и того же UDF?

def get_date_from_year_and_month(year_month):
    """Returns year and month in the format YYYY-MM.
    year, month = year_month

    return str(year) + '-' + str(month).zfill(2)

def function_that_uses_udf(param):
    # Should this be done outside the function?
    get_date_from_year_and_month_udf = F.udf(get_date_from_year_and_month)

    df = df_old.withColumn(
    'date', get_date_from_year_and_month_udf(F.struct([F.col('year'), F.col('month')]))

1 Ответ

1 голос
/ 14 марта 2019

Где, как, например, так и каждый раз через контекст искры:

def squared(s):
   return s * s

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

Не похоже на Hive, где это может храниться в базе данных.

...