Диапазон между одним элементом окна?(Альтернатива - наличие нескольких окон) - PullRequest
0 голосов
/ 08 мая 2019

В настоящее время я пытаюсь создать оконный раздел в pyspark, который сортируется по четырем элементам. Однако один из этих элементов должен быть ограничен, чтобы сортировка элементов 2,3,4 происходила только на неограниченном переходе к текущей строке сортировочного элемента 1.

+-----------+--------+--------+--------+---------------------------+
| Sort 1    | Sort 2 | Sort 3 | Sort 4 | Output: Days Between Sort |
+-----------+--------+--------+--------+---------------------------+
| 1/1/2012  | 0      | 0      | 1      | N/A                       |
+-----------+--------+--------+--------+---------------------------+
| 2/1/2012  | 0      | 0      | 2      | 1                         |
+-----------+--------+--------+--------+---------------------------+
| 15/1/2012 | 0      | 0      | 3      | 13                        |
+-----------+--------+--------+--------+---------------------------+
| 10/1/2012 | 0      | 1      | 0      | 8                         |
+-----------+--------+--------+--------+---------------------------+

В приведенном выше примере дни между строками будут рассчитываться путем взятия даты (сортировка 1), а затем сортировки в порядке возрастания 2,3,4 в неограниченной до текущей строки сортировки 1. Именно поэтому 10 / 1/2012 имеет дни между 8, так как его сравнивают с 1 февраля 2012 года вместо 15/1/2012.

Для справки необходима сортировка 2,3,4, поскольку есть некоторые примеры, выходящие за рамки примера таблицы, которые требуют такой сортировки.

Ниже я представляю, как бы выглядело, если бы можно было включить два оператора Orderby.

    df = df.withColumn("lag_creation_date", F.lag("createdDate", 1).over(Window.partitionBy("X").orderBy("Sort 1").rangeBetween(Window.unboundedPreceding, Window.currentRow).orderBy(F.asc("Sort 2"),F.asc("Sort 3"),F.asc("Sort 4"))))
df = df.withColumn("days_at_version", F.datediff("creation_date", "lag_creation_date"))

Любая помощь будет оценена.

...