首页 > 解决方案 > 在 PySpark 中合并两个数据框

问题描述

我有两个数据帧,DF1 和 DF2,DF1 是存储来自 DF2 的任何附加信息的主数据帧。

假设 DF1 具有以下格式,

Item Id | item      | count
---------------------------
1       | item 1    | 2
2       | item 2    | 3
1       | item 3    | 2
3       | item 4    | 5

DF2 包含 DF1 中已经存在的 2 个项目和两个新条目。(itemId和item被认为是一个单独的组,可以作为join的key)

Item Id | item      | count
---------------------------
1       | item 1    | 2
3       | item 4    | 2
4       | item 4    | 4
5       | item 5    | 2

我需要组合这两个数据框,以便增加现有项目计数并插入新项目。

结果应该是这样的:

Item Id | item      | count
---------------------------
1       | item 1    | 4
2       | item 2    | 3
1       | item 3    | 2
3       | item 4    | 7
4       | item 4    | 4
5       | item 5    | 2

我有一种方法可以做到这一点,不确定它是否有效或正确的方法

temp1 = df1.join(temp,['item_id','item'],'full_outer') \
    .na.fill(0)

temp1\
    .groupby("item_id", "item")\
    .agg(F.sum(temp1["count"] + temp1["newcount"]))\
    .show()

标签: pythonapache-sparkpysparkpyspark-sql

解决方案


因为,两个数据帧的架构是相同的,您可以执行 aunion然后执行groupbyid 和aggregate计数。

step1: df3 = df1.union(df2);
step2: df3.groupBy("Item Id", "item").agg(sum("count").as("count"));

推荐阅读