У меня есть фрейм данных со столбцами start_time
(отметка времени), ev_date
(in int). Я пытаюсь выяснить, являются ли даты в этих двух столбцах последовательными. Мне нужно только сравнить, является ли дата последовательной в каждом отдельном столбце. Я думаю об использовании функции lag
, но не знаю, как ее реализовать. Как узнать пропущенные даты? Большое спасибо.
Вход:
ev_date | start_time
---------------------
20220301| 2022-02-28 10:09:21.356782917
20220301| 2022-02-28 03:09:21.756982919
20220302| 2022-03-01 03:09:21.756982919
20220303| 2022-03-02 03:09:21.756982919
20220305| 2022-03-02 03:09:21.756982919 --ev_date is not right here as 20020304 is missing
20220306| 2022-03-06 03:09:21.756982919 --start_time is not right as it jumped from 03-02 to 03-06
вы можете добавить новый столбец с разницей, а затем отфильтровать, где разница больше 1 дня. что-то вроде (python, но похоже на scala - не уверен, какой язык вам нужен из тегов)
from pyspark.sql.functions import *
from pyspark.sql.window import Window
df1= df.withColumn("diff", datediff(df.ev_date, lag(df.ev_date, 1)
.over(Window.partitionBy("some other column")
.orderBy("ev_date"))))
df1.filter(df1.diff > 1)
вам нужно создать окно, которое будет группировать каждые 2 строки (это отставание), но оконная функция нуждается в разделе, вы можете добавить синтетический столбец, который будет одинаковым для всех строк (.withColumn("fake", lit(1)) а затем разделить по нему
Спасибо, но не могли бы вы объяснить немного больше, что делать, если нет других столбцов для partitionBy? Я надеюсь сравнить каждую строку, а не группу строк.