Apache Spark, выбрал предыдущий последний элемент на основе некоторых условий
У меня есть входные данные, которые имеют идентификатор, 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 случай).
Но я думаю, что это почти как перекрестное соединение, которое я не мог бы себе позволить, так как у меня 100 миллионов рядов.