Python 使用PySpark的多个连接
我正在写我的第一个PySpark项目,我需要一些帮助 该项目是这样的:我有10个不同的数据源,我从每个数据源创建了一个sql查询,以获得如下数据结构: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上,因此我的最终结果
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,这是完全联接的原理