【问题标题】:Pyspark Dataframe Join using UDFPyspark Dataframe Join 使用 UDF
【发布时间】:2016-11-24 06:53:51
【问题描述】:

我正在尝试在 PySpark(类似于 this)中为两个数据帧(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?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 2019-02-02
      • 2020-05-21
      • 2021-04-15
      • 2021-08-13
      • 2021-06-11
      • 2015-09-03
      • 2021-05-04
      相关资源
      最近更新 更多