Skip to content

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
  • Полезно для анализа пользовательских сессий
  • Часто используется в веб-аналитике
  • Может использоваться с другими оконными функциями
  • Поддерживает различные единицы времени (минуты, часы, дни)