首页 > 解决方案 > 在 Pyspark 中使用和条件连接多个数据框

问题描述

我想使用 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 数据框中编写它。

标签: dataframeapache-sparkpysparkapache-spark-sql

解决方案


你可以像下面这样尝试,

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 的更多信息,请单击此处


推荐阅读