在不涉及太多细节的情况下,我试图将一堆行合并到一个条目中。我在下面简化了“源”和“目标”数据框。
来源DF:
身份证号码 | 日期 | 设备 | 有效负载 |
---|---|---|---|
1 | 12/24 | 空 | 空 |
空 | 12/24 | 设备A | a |
空 | 12/24 | 设备B | b |
目的地DF:
身份证号码 | 日期 | 有效负载_设备A | 有效负载_设备B |
---|---|---|---|
1 | 12/24 | a | b |
您可能会猜到,我从具有“id”值的条目开始。然后,我需要根据日期和特定设备名称进行搜索。在结果中,我想为该列指定别名。一旦我开始工作,我想创建一个循环,以便迭代“设备”列中可能找到的所有设备类型(会有不同数量的设备)。
所以这就是我陷入困境的地方。我知道如何进行第一次加入:
(df1 .join(df1, on=join_condition, how='left') 。展示() )
我还知道我可以通过将“join”语句链接在一起来添加多个连接。在该单个连接中,我可以为生成的“Payload”列添加别名,以便将其打印为“Payloadx”。
我的问题是:如果我想对同一个数据帧进行多个连接,我该怎么做?我故意不在此处显示更多代码,因为我尝试了多种方法(包括使用别名,这给我带来了有关数据帧不明确的错误)。
所以我来这里是为了问这个:这可能吗?如果是这样,如果有人可以向我指出需要使用的技术,我相信我可以填写其余的内容。
请参阅帖子以获得答案。
from pyspark.sql.functions import col
def populate_df1():
df1_temp = spark.createDataFrame([
('101','Donald','California','107'),
('102','Catherine','Texas','103'),
('103','Miller','Miami','104'),
('104','Maxerine','Miami','106'),
('105','Daniel','Chicago','106'),
('106','Kate','NewYork','107'),
('107','Will','California','108')
], ['id','name','location','manager_id'])
return df1_temp
df2 = populate_df1()
display(df2)
(df2.alias("emp_df")
.join(df2.alias("mgr_df"), col("emp_df.manager_id") == col("mgr_df.id"), how='left')
.join(df2.alias("location_df"), col("emp_df.manager_id") == col("location_df.id"), how='left')
.select(col("emp_df.*"), col("mgr_df.name").alias("mgr_name"), col("location_df.location").alias("mgr_location"))
.show()
)