Скажем, у меня есть столбец отсортированных временных меток в кадре данных.Я хочу написать функцию, которая добавляет столбец в этот DataFrame, который разрезает временные метки на последовательные временные интервалы в соответствии со следующими правилами:
- начинаются с первой строки и продолжают повторяться до конца
- для каждой строки, если вы прошли n рядов в текущей группе ИЛИ вы прошли более чем временной интервал t в текущей группе, сделайте вырез
- , чтобы получить новый столбец сгрупповое назначение для каждой строки, которое должно быть возрастающим целым числом
На английском языке: каждая группа должна быть не более n строк и не должна занимать более t времени
Например: (Использование целых чисел для отметок времени для упрощения)
INPUT
time
---------
1
2
3
5
10
100
2000
2001
2002
2003
OUTPUT (после функции среза с n = 3 и t = 5)
time | group
----------|------
1 | 1
2 | 1
3 | 1
5 | 2 // cut because there were no cuts in the last 3 rows
10 | 2
100 | 3 // cut because 100 - 5 > 5
2000 | 4 // cut because 2000 - 100 > 5
2001 | 4
2002 | 4
2003 | 5 // cut because there were no cuts in the last 3 rows
У меня такое ощущение, что это можно сделать с помощью оконных функций в Spark.В конце концов, оконные функции были созданы, чтобы помочь разработчикам вычислять скользящие средние.Вы бы в основном вычислили совокупный (в данном случае средний) столбец (цена акций) на окно из n строк.
То же самое можно сделать здесь.Для каждой строки, если в последних n строках отсутствует вырез или промежуток времени между последним вырезом и текущей отметкой времени больше, чем t, cut = true, o.w. cut = false
.Но я не могу понять, как заставить оконную функцию осознавать себя.Это было бы похоже на скользящую среднюю определенной строки, осведомленной о последней скользящей средней.