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".