В настоящее время я пытаюсь создать оконный раздел в 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"))
Любая помощь будет оценена.