python - 以多种方式连接多个表
问题描述
我有 5 个如下表:表 A
秩。 | 输入。 |
---|---|
0。 | 啊 |
1. | bb |
2 | 抄送 |
3 | dd </td> |
表 B
秩。 | 输入。 |
---|---|
0。 | 啊 |
3 | 抄送 |
4 | dd |
5 | 呃</td> |
表 C
秩。 | 输入。 |
---|---|
0。 | 啊 |
5 | ee |
6 | ff |
7 | gg </td> |
表 D
秩。 | 输入。 |
---|---|
0。 | 啊 |
2 | bb |
6 | ff |
7 | gg </td> |
我需要输出如下所示:
决赛桌
秩。 | 输入。 |
---|---|
0。 | 啊 |
2 | bb |
3 | 抄送 |
5 | 呃</td> |
6 | ff |
7 | gg </td> |
如果我只是根据最大的表交叉连接所有表,我会得到以下输出:
秩。 | 输入。 |
---|---|
0。 | 啊 |
有没有一种方法可以获得我想要的输出,而无需跨 AB、BC、CD、BD 等进行多次连接。
请告诉我。我可以使用 SQL 或 Pyspark 来执行此操作。任何建议,将不胜感激。
解决方案
您可以合并所有表,按输入分组并获得排名的最大值:
select max(`rank`) as `rank`, input
from (
select * from tableA
union all
select * from tableB
union all
select * from tableC
union all
select * from tableD
) t
group by input
在 Pyspark 中它会是
from functools import reduce
df = reduce(lambda a, b: a.unionAll(b), [tableA,tableB,tableC,tableD])
result = df.groupBy('input').agg(F.max('rank').alias('rank'))
推荐阅读
- ava - 我该如何命名我的文件?如何运行单个测试?
- cmake - 构建 CGAL 5.0 演示 GraphicsView 的问题
- spring - 如何验证微服务之间的数据 ID
- javascript - 为 ES6 中的数组辅助方法向迭代器函数传递多个参数
- python - 有没有一种方法可以使用 POST 变量在 Mako 模板中分配图像的 src?
- three.js - 如何使用 ThreeJS 使 OrbitControls 与 8thWall Web 一起使用
- discord.net - 怎么直接给公会里的每个人发消息?不和谐网
- php - 在 laravel 6.9.0 上设置语言环境前缀后“此密码重置令牌无效”
- python-3.x - 我想知道怎么做。(在 Python 上,使用 twitter api)
- json - JSON 列表语法