W uproszczonym przykładzie mam dataframe „DF” z kolumny „kol1, kolumna2” i chce obliczenie maksimum w rzędach po zastosowaniu funkcji każdej kolumny:PySpark wierszami funkcją składu
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)))
Więc jeśli DF:
col1 col2
1 2
3 0
Następnie
df2:
col1 col2 result
1 2 3
3 0 4
Powyższe nie wydają się działać i produkuje „Nie można ocenić wyrażenia: PythonUDF # f ...”
jestem absolutnie pozytywne „f_udf” działa dobrze na moim stole, a głównym problemem jest to, ze max_udf.
Bez tworzenia dodatkowych kolumn lub używania podstawowej mapy/zmniejszenia, czy istnieje sposób na wykonanie powyższych czynności w całości przy użyciu ramek danych i udfs? Jak mam zmodyfikować "max_udf"?
Próbowałem również:
max_udf=udf(max, IntegerType())
która produkuje ten sam błąd.
Ja również potwierdziła, że następujące utwory:
df2=(df.withColumn("temp1", f_udf(df.col1))
.withColumn("temp2", f_udf(df.col2))
df2=df2.withColumn("result", max_udf(df2.temp1,df2.temp2))
Dlaczego jest to, że nie mogę zrobić to za jednym zamachem?
Chciałbym zobaczyć odpowiedź, która uogólnia każdą funkcję "f_udf" i "max_udf".
Dzięki, to pierwsza prawdziwa odpowiedź na to pytanie! –
@AlexR. - jeśli jesteś zadowolony z tej odpowiedzi, zaakceptuj to! – proinsias