потоковое воспроизведение: выполните ежедневную агрегацию - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть потоковый фрейм данных, и я хочу вычислить некоторые ежедневные счетчики. До сих пор я использовал накрутку 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 также не будет работать с водяным знаком, так как любые поздние поступающие события вызовут предыдущее обновление счетчика, и я снова столкнусь с той же проблемой.

1 Ответ

1 голос
/ 23 апреля 2020

Я думаю, что вы должны выполнить агрегацию за самый короткий требуемый промежуток времени, а затем выполнить вторичную агрегацию для этих основных агг. Выполнение агг для 1 day приведет к вашей работе, если не сейчас, то определенно в будущем.

  1. Выполните подсчет первичных агрегаций по часам или 5 минутам и запишите их в БД временных серий, таких как Прометей / Графит.
  2. Используйте графану для построения этих метрик, выполняйте вторичные агрегации, такие как ежедневный подсчет поверх первичной агрегации.

Это увеличит некоторые усилия DevOps, но вы можете визуально контролировать свое приложение в режиме реального времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...