Я пишу udf, который будет принимать два столбца данных вместе с дополнительным параметром (постоянное значение) и должен добавить новый столбец в кадр данных.Моя функция выглядит так:
def udf_test(column1, column2, constant_var):
if column1 == column2:
return column1
else:
return constant_var
также, я делаю следующее для передачи в несколько столбцов:
apply_test = udf(udf_test, StringType())
df = df.withColumn('new_column', apply_test('column1', 'column2'))
Это не работает сейчас, пока я не удалю constant_var
какмои функции третий аргумент, но мне это действительно нужно.Поэтому я попытался сделать что-то вроде следующего:
constant_var = 'TEST'
apply_test = udf(lambda x: udf_test(x, constant_var), StringType())
df = df.withColumn('new_column', apply_test(constant_var)(col('column1', 'column2')))
и
apply_test = udf(lambda x,y: udf_test(x, y, constant_var), StringType())
Ничто из вышеперечисленного не помогло мне.Я получил эти идеи, основываясь на , и , сообщениях stackoverflow, и я думаю, что очевидно, чем мой вопрос отличается от обоих.Любая помощь будет принята с благодарностью.
ПРИМЕЧАНИЕ: Я упростил функцию здесь только для обсуждения, и фактическая функция более сложна.Я знаю, что эту операцию можно выполнить с помощью операторов when
и otherwise
.