簡體   English   中英

使用 UDF 連接 Pyspark 數據框

[英]Pyspark Dataframe Join using UDF

我正在嘗試為 PySpark 中的兩個數據幀(df1 和 df2)創建自定義連接(類似於this ),代碼如下所示:

my_join_udf = udf(lambda x, y: isJoin(x, y), BooleanType())
my_join_df = df1.join(df2, my_join_udf(df1.col_a, df2.col_b))

我收到的錯誤消息是:

java.lang.RuntimeException: Invalid PythonUDF PythonUDF#<lambda>(col_a#17,col_b#0), requires attributes from more than one child

有沒有辦法編寫可以處理來自兩個單獨數據幀的列的 PySpark UDF?

火花 2.2+

您必須在配置中使用crossJoin或啟用交叉聯接:

df1.crossJoin(df2).where(my_join_udf(df1.col_a, df2.col_b))

火花 2.0、2.1

下面顯示的方法在 Spark 2.x 中不再有效。 SPARK-19728

火花1.x

理論上你可以加入和過濾:

df1.join(df2).where(my_join_udf(df1.col_a, df2.col_b))

但總的來說,你不應該對這一切。 任何類型的join這不是基於平等,需要一個完整的笛卡爾乘積(相同的答案),它是很難被接受(見為什么在SQL查詢中導致笛卡爾積使用UDF? )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM