session_window(timeColumn, gapDuration)
Описание
Функция session_window()
создает сессионное окно для группировки событий, где события в одной сессии разделены не более чем на указанный интервал времени.
Параметры
timeColumn
: Column - столбец с временными меткамиgapDuration
: str - максимальный интервал между событиями в одной сессии (например, '5 minutes', '1 hour', '1 day')
Возвращаемое значение
Column - идентификатор сессии
Пример использования
from pyspark.sql.functions import session_window, to_timestamp, col
from pyspark.sql import SparkSession
# Создаем SparkSession
spark = SparkSession.builder.appName("session_window_example").getOrCreate()
# Создаем DataFrame с временными метками событий
data = [
("user1", "2024-03-20 10:00:00"),
("user1", "2024-03-20 10:02:00"),
("user1", "2024-03-20 10:15:00"), # Новая сессия (разрыв > 5 минут)
("user2", "2024-03-20 10:00:00"),
("user2", "2024-03-20 10:04:00"),
("user2", "2024-03-20 10:30:00") # Новая сессия (разрыв > 5 минут)
]
df = spark.createDataFrame(data, ["user_id", "event_time"])
df = df.withColumn("event_time", to_timestamp("event_time"))
# Создаем сессионные окна с максимальным интервалом 5 минут
df = df.withColumn("session", session_window("event_time", "5 minutes"))
# Группируем по пользователю и сессии
result = df.groupBy("user_id", "session").count()
result.show(truncate=False)
# Результат:
# +-------+------------------------------------------+-----+
# |user_id|session |count|
# +-------+------------------------------------------+-----+
# |user1 |{2024-03-20 10:00:00, 2024-03-20 10:02:00}|2 |
# |user1 |{2024-03-20 10:15:00, 2024-03-20 10:15:00}|1 |
# |user2 |{2024-03-20 10:00:00, 2024-03-20 10:04:00}|2 |
# |user2 |{2024-03-20 10:30:00, 2024-03-20 10:30:00}|1 |
# +-------+------------------------------------------+-----+
Примечания
- Создает новую сессию, если разрыв между событиями превышает gapDuration
- Возвращает NULL, если входное значение NULL
- Полезно для анализа пользовательских сессий
- Часто используется в веб-аналитике
- Может использоваться с другими оконными функциями
- Поддерживает различные единицы времени (минуты, часы, дни)