Pyspark Dataframe使用UDF加入

时间:2016-07-20 21:44:48

标签: python apache-spark pyspark apache-spark-sql user-defined-functions

我试图在PySpark中创建两个数据帧(df1和df2)的自定义连接(类似于this),代码如下所示:

id: 'mywin'

我收到的错误消息是:

''.join(['07/18/2013'[0:3],'07/18/2013'[6:]])

有没有办法编写可以处理来自两个独立数据帧的列的PySpark UDF?

1 个答案:

答案 0 :(得分:11)

Spark 2.2 +

您必须使用crossJoin或启用交叉联接in the configuration

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

Spark 2.0,2.1

下面显示的方法在Spark 2.x中不再起作用。请参阅SPARK-19728

Spark 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?)。