【问题标题】:Joining Multiple Dataframes with and conditions in Pyspark在 Pyspark 中使用和条件连接多个数据框
【发布时间】:2020-10-21 07:22:54
【问题描述】:

我想使用 Pyspark 数据框实现 beolw sql 连接条件。

    select *
    FROM tableA A, tablec C, tableB  B
    A.sno = C.sno AND A.sno = B.sno AND 
    A.sdt = C.sdt AND A.sdt = B.sdt 
    AND A.sid = C.sid AND A.sid = B.sid 

我试过下面的代码(df_A0,df_C0,df_B0 是 3 个不同的数据帧)

    join_data = df_A0.join(df_C0, (df_A0.sno===df_C0.sno).join(df_B0, (df_A0.sno===df_B0.sno)) & \
    (df_A0.sdt === df_C0.sdt) & (df_A0.sdt === df_B0.sdt) & (df_A0.sid === df_C0.sid) & \
     df_A0.sid = df_B0.sid,how='inner'))

但是当我执行它时显示无效的语法错误。

有人可以指导我如何在 pyspark 数据帧中编写它。

【问题讨论】:

  • python === 中没有三等分。检查你的括号,它们没有正确打开/关闭。 invalid syntax error 意味着你写了糟糕的 python 代码。

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


【解决方案1】:

你可以像下面这样尝试,

join_data = df_A0.alias("df_A0").join(df_C0.alias("df_C0"), (df_A0.sno == df_C0.sno) & (df_A0.sdt == df_C0.sdt) & (df_A0.sid == df_C0.sid),"inner")\
    .join(df_B0.alias("df_B0"), (df_A0.sno == df_B0.sno) & (df_A0.sdt == df_B0.sdt) & (df_A0.sid == df_B0.sid), "inner")

更多关于 Spark-SQL 的信息请点击this

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多