Python 使用PySpark的多个连接

Python 使用PySpark的多个连接,python,apache-spark,pyspark,pyspark-sql,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 ...... 我的问题是如何将所有这些数据集连接在一起(完全外部),所有这些数据集都位于同一个键-UserID上,因此我的最终结果

我正在写我的第一个PySpark项目,我需要一些帮助

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

A - UserID, fieldA, fieldB
B - UserID, fieldC
C - UserID, fieldD, fieldE, fieldF
D - UserID, fieldG, fieldH
......
我的问题是如何将所有这些数据集连接在一起(完全外部),所有这些数据集都位于同一个键-UserID上,因此我的最终结果如下所示:

UserID, fieldA, fieldB, fieldC, fieldD, .....
注释:并非所有用户都存在于所有数据集中!有可能a有5个用户,B有100个用户,C有20个用户(a或B中都不存在)

不确定什么是最好的/最简单的方法-使用Spark SQL函数或Spark.SQL(SQL查询)-但是每一个帮助都会很好


非常感谢高级版。

您只需编写几个
join
s:

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 .... ]
)

嗨,谢谢你的回答!但是-并非所有用户都存在于所有数据集中!有可能a有5个用户,B有100个用户,C有20个用户(a或B中都不存在)。在您的示例中,所有连接都在a.UserID上,因此如果B+C有一个不在a中的用户-它不会在最终连接中…@Bramat No,它将创建一个只有一列UserID的第一个数据帧,其中包含来自a和B的所有数据,然后是另一个包含(a+B)+C的数据帧,等等。。。。最后,您将拥有所有的ID,这是完全联接的原理