我正在编写我的第一个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)是最好/最简单的方法是什么,但是每一个帮助都会很棒!
非常感谢高级
。答案 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 .... ]
)