PySpark построчная композиция функций

В качестве упрощенного примера у меня есть фрейм данных "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)))

Так что если дф:

col1   col2
1      2
3      0

затем

df2:

col1   col2  result
1      2     3
3      0     4

Вышеприведенное, похоже, не работает и выдает «Невозможно оценить выражение: PythonUDF # f ...»

Я абсолютно уверен, что "f_udf" прекрасно работает на моем столе, и основная проблема связана с max_udf.

Без создания дополнительных столбцов или использования базовых карт / сокращения, есть ли способ сделать все вышеперечисленное полностью, используя кадры данных и файлы udf? Как мне изменить "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".

Ответы на вопрос(2)

Ваш ответ на вопрос