Python 使用UDF的Pyspark数据帧连接
我试图在PySpark(类似于)中为两个数据帧(df1和df2)创建一个自定义联接,代码如下所示:Python 使用UDF的Pyspark数据帧连接,python,apache-spark,pyspark,apache-spark-sql,user-defined-functions,Python,Apache Spark,Pyspark,Apache Spark Sql,User Defined Functions,我试图在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
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
java.lang.RuntimeException:无效的PythonUDF PythonUDF#(列a#17,列b#0),需要来自多个子项的属性
有没有一种方法可以编写PySpark UDF来处理来自两个独立数据帧的列?Spark 2.2+ 必须使用或启用交叉联接: 火花2.0、2.1 下面显示的方法在Spark 2.x中不再有效。看 Spark 1.x 理论上,您可以加入并筛选:
df1.join(df2).where(my_join_udf(df1.col_a, df2.col_b))
但总的来说,你不应该对这一切视而不见。任何类型的连接
,如果不是基于相等,则需要一个几乎不可接受的完全笛卡尔积(与答案相同)(另请参见)
df1.join(df2).where(my_join_udf(df1.col_a, df2.col_b))