Я хочу запустить UDAF для groupBy, который будет состоять из всех значений для каждого ключа, оглядываясь назад, на 24 часа. ОТ последнего времени события ключа . Этот 24-часовой параметр будет настраиваемым.
Примечание: Я не могу запустить аналитические функции Spark Window, потому что он работает над кадром для каждой строки, что может привести к серьезным проблемам с производительностью. Это не проблема с движущимся окном !!!
Я пытался использовать Spark Window (отличается от Spark Window Analytic), код выглядит следующим образом. Это немного неправильно для временных окон (см. Вывод)
val windowDF = customerDF.groupBy(col("key"),
window($"session_end_tm",
"24 hours"))
.count
Это мой пример кода.
val customer = Seq(
("101", 120000.00, 0.00, "2018-01-23 01:23:16"),
("101", 410500.00, 500.00, "2018-01-23 01:26:2"),
("101", 200.00, 200.00, "2018-01-23 13:07:31"),
("101", 410500.00, 0.0, "2018-01-23 18:38:21"),
("101", 500.00, 0.0, "2018-01-23 19:32:59")
)
val customerDF = customer.toDF("key", "val_1", "val_2", "session_end_tm")
val windowDF = customerDF.groupBy(col("key"), window($"session_end_tm", "24 hours")).count
АКТУАЛЬНЫЙ ВЫХОД
Результирующий кадр данных из кода выше
windowDF.show(false)
+---+------------------------------------------+-----+
|key|window |count|
+---+------------------------------------------+-----+
|101|[2018-01-23 19:00:00, 2018-01-24 19:00:00]|1 |
|101|[2018-01-22 19:00:00, 2018-01-23 19:00:00]|4 |
+---+------------------------------------------+-----+
ОЖИДАЕМЫЙ ВЫХОД
Что я ожидаю от кода выше
+---+------------------------------------------+-----+
|key|window |count|
+---+------------------------------------------+-----+
|101|[2018-01-22 20:00:00, 2018-01-23 20:00:00]|5 |
+---+------------------------------------------+-----+
Примечание: Как уже упоминалось в начале, реальным результатом будут несколько агрегированных столбцов, которые пробегают UDAF, а не просто столбец "count".