【问题标题】:Left Join errors out: org.apache.spark.sql.AnalysisException: Detected implicit cartesian product for LEFT OUTER join between logical plans左连接错误:org.apache.spark.sql.AnalysisException:检测到逻辑计划之间左外连接的隐式笛卡尔积
【发布时间】:2021-03-20 03:37:39
【问题描述】:

***编辑

df_joint = df_raw.join(df_items,on='x',how='left') 

标题异常发生在 Apache Spark 2.4.5

df_raw 有 2 列“x”、“y”的数据,而 df_items 是带有其他一些列的架构的空数据框

左连接发生在值为 null 的情况下,这应该从第一个数据帧获取整个数据,并从第二个数据帧获取空列。

当“X”为浮点数时,它完全可以正常工作,但是当我将“X”转换为隐式笛卡尔积的抛出错误时

我在 spark 2.4.5 中收到此错误。

为什么会发生这种情况以及如何在不启用 spark 交叉连接的情况下解决此问题 spark.conf.set("spark.sql.crossJoin.enabled", "true")

【问题讨论】:

  • 为什么不使用明确的df_raw.crossJoin(df_items)
  • @mazaneicha 交叉连接将导致重复列x
  • 列可以在加入之前被删除,特别是因为我怀疑它只是为了做左加入。

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

可能是 Spark 中的一个 bug,但如果你只是想添加列,你可以执行以下操作:

import pyspark.sql.functions as F

df_joint = df_raw.select(
    '*',
    *[F.lit(None).alias(c) for c in df_items.columns if c not in df_raw.columns]
)

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2017-11-29
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多