Apache Spark, выбрал предыдущий последний элемент на основе некоторых условий - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть входные данные, у которых есть id, pid, pname, ppid, которые являются id (можно подумать, что пришло время), pid (идентификатор процесса), pname (имя процесса), ppid (идентификатор родительского процесса), который создал 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 (предыдущими pnames) следующего условия 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, затем взять diff между идентификаторами и выбрать строку с минимальной положительной разницей, может быть, затем снова присоединиться для случаев, когда мы не нашли положительных различий (-1 случай).

Но я думаю, что это почти как перекрестное соединение, которое я не мог бы себе позволить, так как у меня 100M рядов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...