尝试在单个 pyspark 数据帧中进行多个连接

问题描述 投票:0回答:1

在不涉及太多细节的情况下,我试图将一堆行合并到一个条目中。我在下面简化了“源”和“目标”数据框。

来源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”。

我的问题是:如果我想对同一个数据帧进行多个连接,我该怎么做?我故意不在此处显示更多代码,因为我尝试了多种方法(包括使用别名,这给我带来了有关数据帧不明确的错误)。

所以我来这里是为了问这个:这可能吗?如果是这样,如果有人可以向我指出需要使用的技术,我相信我可以填写其余的内容。

dataframe join pyspark
1个回答
0
投票

请参阅帖子以获得答案。

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()
)   
© www.soinside.com 2019 - 2024. All rights reserved.