#java #google-cloud-dataflow #apache-beam
#java #google-облако-поток данных #apache-beam
Вопрос:
я хочу установить временную метку для неограниченной коллекции строк
в моем решении каждая строка pcollection представляет собой строку csv
в одном поле этой строки есть временная метка и другие поля, такие как количество кликов и т.д.
я хочу обработать коллекцию с использованием собственной временной метки (время события), а не временной метки по умолчанию, установленной apache beam
основной угрозой этого потока данных является групповое количество кликов в минуту
у меня есть служба ftp, которая отправляет файлы в одну папку, которую моя работа прослушивает каждые 1 минуту и обрабатывает в окне исправления в течение 1 минуты. проблема в том, что возможны поздние данные
я делаю KV pcolection, а ключ — это временная метка без секунд и значения количества кликов и применяю group by
я получаю «клики в минуту» и отправляю эту коллекцию ПК в базу данных
пример пакета элемента данных, генерируемого до 12:05 вечера (10 файлов), время получения данных 12:06 вечера
Данные генерации задания 12:05 120 кликов
пакет элемента данных генерируется до 12:05 вечера и 12:06 (файлы с опозданием на 12:05)
время получения данных 12:07 вечера
Данные генерации задания 12:05 10 кликов 12:06 135 кликов
я хочу отказаться от обработки поздних данных, основанных на данных о событиях, так, как я ищу
другими словами, не помещайте в БД поздние данные -> 12:05 вечера -10clicks
Ответ №1:
Вы можете использовать преобразование с отметками времени для назначения временных меток из данных. Например, предполагая, что ваш ключ представляет собой строку, которая может быть проанализирована по времени Joda:
records.apply(
WithTimestamps.of((KV<String, String> rec) -> Instant.parse(rec.getKey()));