Как ждать с 1-часовым буфером в Apache-Beam, а затем нажать дату? - PullRequest
0 голосов
/ 18 июня 2019

Events timeline

Я собираю информацию о рейсах.Максимальная продолжительность полета 10 часов.Я получаю информацию об отслеживании примерно каждые 1 минуту.Порядок событий нарушается при обработке в Apache Beam.После объединения всех данных я хочу перенести их в BigQuery и отбросить данные, чтобы они не занимали память.

У меня есть 2 стратегии, как это сделать:

1) Подождите 1 час иесли новых данных не поступает, передайте их в BQ

2) Каждые 15 минут запускайте свой собственный алгоритм, который проверяет, полны ли данные.

Я хочу перейти с 1), потому что это проще,Может ли мой код быть правильным?:

models = (xmls | beam.FlatMap(process_xmls))
tracking_informations = models | beam.ParDo(FilterTI())
grouped_tis = tracking_informations | beam.WindowInto(window.FixedWindows(10 * 3600), trigger=AfterProcessingTime(1 * 3600), accumulation_mode=AccumulationMode.DISCARDING) | beam.GroupByKey() | "push and merge to BQ"

1 Ответ

1 голос
/ 21 июня 2019

После прочтения вашего варианта использования и желаемого подхода - группировки всех событий, относящихся к одному и тому же рейсу, до тех пор, пока вы не обнаружите промежуток бездействия - это выглядит как идеальное соответствие для окон сеансов . В этом примере вы должны использовать идентификатор рейса (f1, f2 и т. Д. В качестве ключа) и указывать разрыв в 1 час. Если в течение этого времени новых событий не наблюдается, сеанс будет прерван.

Вы можете использовать их с beam.WindowInto(window.Sessions(session_gap)), и вы можете найти полный пример здесь (не забудьте добавить шаг Group By Key, чтобы фактически объединить события в один сеанс).

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