繁体   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