Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用UDF的Pyspark数据帧连接_Python_Apache Spark_Pyspark_Apache Spark Sql_User Defined Functions - Fatal编程技术网

Python 使用UDF的Pyspark数据帧连接

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

我试图在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
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))