Apache Beam - Что происходит с Windows / триггерами после нескольких GroupByKey? - PullRequest
0 голосов
/ 30 мая 2019

В разделе окон руководства по программированию модели Beam показан окно, определенное и используемое в преобразовании GroupyByKey после ParDo. ( раздел 7.1.1 ).

Как долго окно остается в области видимости для элемента?

Давайте представим конвейер, подобный этому:

my_pcollection = p | MySourceOfData()

results_pcoll = (my_pcollection
                 | beam.WindowInto(..., triggering=...)
                 | beam.GroupByKey()
                 | beam.ParDo(DoSomeFormattingFn())
                 | beam.Combine.Globally(sum))

Предположим, что первое окно агрегируется по ключу, но в Во втором окне вы можете комбинировать элементы по всем клавишам.

Как будет выглядеть results_pcoll? Это будет окно? Будет ли это под ключ?

1 Ответ

0 голосов
/ 30 мая 2019

В Beam важно помнить, что каждый элемент имеет окно, связанное с ним .

В фрагменте кода элементы my_pcollection связаны с глобальным окном . Когда вы добавляете beam.WindowInto, вы добавляете окно к каждому элементу - и когда они переходят в GroupByKey, элементы будут группироваться по ключу и окну .


Когда вы идете вниз по течению к ParDo и Combine, ваши элементы продолжают иметь то же самое окно , и тот же триггер .

Это происходит потому, что Beam пытается позволить вашим данным продолжать проходить через ваш конвейер, поэтому он сохраняет то же окно и запускает семантику.


С учетом этих соображений ваш results_pcoll будет иметь то же окно и ту же семантику триггера, которую вы добавили в начале конвейера.

Благодаря глобальному объединению вы получите единую агрегацию по всем ключам, но у вас также будет по одной агрегации для каждого окна .

...