使用 UDF 加入 Pyspark Dataframe
Pyspark Dataframe Join using UDF
我正在尝试为 PySpark 中的两个数据帧(df1 和 df2)创建自定义连接(类似于 ),代码如下所示:
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?
Spark 2.2+
你必须使用 crossJoin
or enable cross joins :
df1.crossJoin(df2).where(my_join_udf(df1.col_a, df2.col_b))
Spark 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
类型都需要完整的笛卡尔积(与答案相同),这很少被接受(另请参见 )。
我正在尝试为 PySpark 中的两个数据帧(df1 和 df2)创建自定义连接(类似于
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?
Spark 2.2+
你必须使用 crossJoin
or enable cross joins
df1.crossJoin(df2).where(my_join_udf(df1.col_a, df2.col_b))
Spark 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
类型都需要完整的笛卡尔积(与答案相同),这很少被接受(另请参见