В качестве упрощенного примера у меня есть dataframe "df" с столбцами "col1, col2", и я хочу вычислить максимальный размер строки после применения функции к каждому столбцу:
def f(x):
return (x+1)
max_udf=udf(lambda x,y: max(x,y), IntegerType())
f_udf=udf(f, IntegerType())
df2=df.withColumn("result", max_udf(f_udf(df.col1),f_udf(df.col2)))
Итак, если df:
col1 col2
1 2
3 0
Тогда
df2:
col1 col2 result
1 2 3
3 0 4
Вышеприведенное не работает и создает "Невозможно оценить выражение: PythonUDF # f..."
Я абсолютно уверен, что "f_udf" отлично работает на моем столе, и главная проблема связана с max_udf.
Не создавая дополнительных столбцов или используя базовую карту/сокращение, существует ли способ сделать это полностью с использованием dataframes и udfs? Как мне изменить "max_udf"?
Я также пробовал:
max_udf=udf(max, IntegerType())
который производит ту же ошибку.
Я также подтвердил, что следующие работы:
df2=(df.withColumn("temp1", f_udf(df.col1))
.withColumn("temp2", f_udf(df.col2))
df2=df2.withColumn("result", max_udf(df2.temp1,df2.temp2))
Почему я не могу сделать это за один раз?
Я хотел бы получить ответ, обобщающий любую функцию "f_udf" и "max_udf."