У меня есть потоковый фрейм данных, и я хочу вычислить некоторые ежедневные счетчики. До сих пор я использовал накрутку windows с водяным знаком следующим образом:
.withWatermark("timestamp", "10 minutes") \
.groupBy(window("timestamp","1 day")) \
.count()
Мой вопрос заключается в том, является ли это наилучшим (с точки зрения ресурсов) способом для выполнения этой ежедневной агрегации, или я должен вместо этого выполнить последовательность агрегаций на меньшем windows (скажем, ежечасном или даже меньшем) и затем агрегирование этих часовых счетчиков для достижения ежедневного счета.
Более того, если я попробую второй подход, то есть меньший windows, как я могу это сделать?
Я не могу выполнить обе агрегации (ежечасно и ежедневно) в одном приложении потоковой передачи с плавающей точкой, я получаю следующее:
Multiple streaming aggregations are not supported with streaming
DataFrames/Datasets.
. Поэтому следует ли использовать приложение Spark для публикации ежечасные агрегации к топике Кафки c, читать этот поток из другого искрового приложения и подсчитывать ежедневную сумму?
Если да, то как мне go узнать об "режиме обновления" в производителе? Второе приложение будет получать обновленные значения из первого приложения, и поэтому эта «сумма» будет неправильной. Более того, добавление trigger
также не будет работать с водяным знаком, так как любые поздние поступающие события вызовут предыдущее обновление счетчика, и я снова столкнусь с той же проблемой.