2016-07-20 8 views
3

私は(thisに類似)PySparkに2つのデータフレーム(DF1とDF2)のために参加したカスタムを作成しようとしているを使用して参加します私は次のようになります:Pysparkデータフレームは、このようなコードで、UDF

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

2つの別々のデータフレームから列を処理できるPySpark UDFを書く方法はありますか?あなたはcrossJoinを使用したり、クロスを有効にする必要が

答えて

5

スパーク2.2+

in the configurationを結合します

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

スパーク2.0、以下に示す2.1

方法ではもはや機能しません。スパーク2.x. SPARK-19728を参照してください。

スパーク

は、理論的にはあなたが参加することができ1.xおよびフィルタ:

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

しかし、一般的には、あなたがすべきではないそれをすべてに。平等に基づいていないjoinのタイプは、まれに許容される完全なデカルト製品(答えと同じ)を必要とします(Why using a UDF in a SQL query leads to cartesian product?も参照)。

関連する問題