我有两个数据帧,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 回答
由于两个数据帧的架构相同,因此您可以执行
union
并执行goupby
id和aggregate
计数 .有几种方法可以做到这一点 .
根据您描述的内容,最直接的解决方案是使用RDD -
SparkContext.union
:替代解决方案是使用
DataFrame.union
来自pyspark.sql
注意:我之前建议使用
unionAll
,但在Spark 2.0中已弃用