есть ли способ установить временную метку в неограниченной исходной коллекции ПК?

#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()));