python - 在 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()
解决方案
因为,两个数据帧的架构是相同的,您可以执行 aunion
然后执行groupby
id 和aggregate
计数。
step1: df3 = df1.union(df2);
step2: df3.groupBy("Item Id", "item").agg(sum("count").as("count"));
推荐阅读
- c++ - SOIL 图像库无法从任何其他目录加载图像文件
- javascript - 如何将表格添加到我制作的 HTML 中?
- node.js - 如何从图像 url 创建 multer 文件
- javascript - 使用 Typescript (React) 截断文本或带有省略号的行的跨浏览器多行文本
- lisp - 在 LISP (Racket) 中定义一棵树
- loops - 重新启动 AS3 循环的最佳方法是什么?
- javascript - 两种模式都在点击时触发
- java - java中的高阶函数,如何编写一个不带参数的方法并返回一个Map,其中Map的值是java中的一个方法
- android - Flutter - Activity Tracker App - 步数、楼上/楼下、静止
- javascript - 角度基于权限的路由