首页 文章

在PySpark中合并两个数据帧

提问于
浏览
0

我有两个数据帧,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被视为单个组,可以视为连接的关键)

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()

2 回答

  • 0

    由于两个数据帧的架构相同,因此您可以执行 union 并执行 goupby id和 aggregate 计数 .

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

    有几种方法可以做到这一点 .

    根据您描述的内容,最直接的解决方案是使用RDD - SparkContext.union

    rdd1 = sc.parallelize(DF1)
    rdd2 = sc.parallelize(DF2)
    
    union_rdd = sc.union([rdd1, rdd2])
    

    替代解决方案是使用 DataFrame.union 来自 pyspark.sql

    注意:我之前建议使用 unionAll ,但在Spark 2.0中已弃用

相关问题