使用PySpark的多个联接

时间:2019-03-28 08:36:00

标签: python apache-spark pyspark pyspark-sql

我正在编写我的第一个PySpark项目,请给我一些帮助。

该项目是这样的:我有10个不同的数据源,并且我从每个数据源中创建了一个sql查询以获取如下所示的数据结构:

A - UserID, fieldA, fieldB
B - UserID, fieldC
C - UserID, fieldD, fieldE, fieldF
D - UserID, fieldG, fieldH
......

我的问题是如何将所有这些数据集(FULL OUTER)连接在一起,并且都在同一键-用户ID上,所以我的最终结果将如下所示:

UserID, fieldA, fieldB, fieldC, fieldD, .....

评论:并非所有用户都存在于所有数据集中! A有5个用户,B有100个用户,C有20个用户(在A或B中都不存在)。

不确定使用Spark SQL函数或spark.sql(SQL Query)是最好/最简单的方法是什么,但是每一个帮助都会很棒!

非常感谢高级

1 个答案:

答案 0 :(得分:0)

您可以简单地编写服务器式join

df_A.join(
    df_B,
    on="UserID",
    how="full"
).join(
    df_C,
    on="UserID",
    how="full"
).join( ... )

如果您希望它更紧凑,则可以执行以下操作:

from functools import reduce

joined_df = reduce(
    lambda a, b: a.join(
            b,
            on="UserID",
            how="full"
        )
    ),
    [df_A, df_B, df_C .... ]
)