sql - Apache spark窗口,根据某些条件选择上一个最后一项
问题描述
我有一个输入数据,它有 id、pid、pname、ppid,它们是 id(可以认为是时间)、pid(进程 id)、pname(进程名称)、ppid(父进程 id)谁创建了 pid
+---+---+-----+----+
| id|pid|pname|ppid|
+---+---+-----+----+
| 1| 1| 5| -1|
| 2| 1| 7| -1|
| 3| 2| 9| 1|
| 4| 2| 11| 1|
| 5| 3| 5| 1|
| 6| 4| 7| 2|
| 7| 1| 9| 3|
+---+---+-----+----+
现在需要找到 ppname(父进程名称),它是以下条件的最后一个 pname(以前的 pname)previous.pid == current.ppid
上一个示例的预期结果:
+---+---+-----+----+------+
| id|pid|pname|ppid|ppname|
+---+---+-----+----+------+
| 1| 1| 5| -1| -1|
| 2| 1| 7| -1| -1| no item found above with pid=-1
| 3| 2| 9| 1| 7| last pid = 1(ppid) above, pname=7
| 4| 2| 11| 1| 7|
| 5| 3| 5| 1| 7|
| 6| 4| 7| 2| 11| last pid = 2(ppid) above, pname=11
| 7| 1| 9| 3| 5| last pid = 3(ppid) above, pname=5
+---+---+-----+----+------+
我可以基于pid==ppid
然后在 id 之间获取差异并选择具有最小正差异的行自行加入,然后对于我们没有找到任何正差异的情况(-1 案例)再次加入。
但我认为它几乎就像一个交叉连接,因为我有 100M 行,所以我可能买不起。
解决方案
推荐阅读
- bash - 如何检查 git merge 是否真的在多仓库 bash 脚本中进行了合并
- ms-access - Access 365 数据表计算
- python - Pystan 后不确定区间
- python - Keras 实现了一个输出 sample_weight 的数据生成器
- angular - 如何订阅可观察对象上角度模型的更改?
- reactjs - webapi自定义路由上的404
- swift - var something: (() -> Void) 是什么意思?在斯威夫特
- java - Java 方法 File::getName 使用不同的斜杠以不同的方式工作
- delphi - 带有服务应用程序的 IShellFolder
- c# - C# 中的字符串搜索有点类似于 VB 中的 LIKE 运算符