Apache Spark窗口,根据某些条件选择了上一个项目

时间:2018-12-06 01:14:16

标签: sql apache-spark apache-spark-sql window-functions apache-spark-dataset

我有一个输入数据,其中包含创建id的id,pid,pname,ppid(可能认为是时间),pid(进程ID),pname(进程名称),ppd(父进程ID)。 / p>

+---+---+-----+----+
| 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(父进程名称),它是以下条件previous.pid == current.ppid的最后一个pname(先前的pnames)

上一个示例的预期结果:

+---+---+-----+----+------+
| 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情况​​)再次加入。

但是我认为这几乎像是交叉连接,由于我有1亿行,所以我可能负担不起。

0 个答案:

没有答案