Функция ParDo не ждет окна в Apache BEAM - PullRequest
0 голосов
/ 29 апреля 2020

Я создал окно в Apache BEAM, чтобы дождаться окончания срока действия окна или переполнения окна (сообщения не ограничены и приходят из очереди pub / sub):

   .apply("Window", Window.<TraceUpdateMessage>into(new GlobalWindows())
                        .withTimestampCombiner(TimestampCombiner.EARLIEST)
                        .triggering(Repeatedly.forever(
                                AfterFirst.of(
                                        AfterProcessingTime
                                                .pastFirstElementInPane()
                                                .plusDelayOf(Duration.standardMinutes(options.getFixedWindowDuration())),
                                        AfterPane
                                                .elementCountAtLeast(options.getFixedWindowElementCountTrigger())
                                )
                        ))
                        .withAllowedLateness(Duration.ZERO)
                        .discardingFiredPanes()
                )

У меня есть ParDo сразу после окна:

 .apply("Aggregate", ParDo.of(
                        new CustomAggregationFunction()
)

проблема в том, что CustomAggregationFunction вызывается сразу, и не похоже, что окно что-то делает. Цель go - вызывать CustomAggregationFunction только тогда, когда окно заполнено, и обрабатывать все элементы внутри этого окна.

1 Ответ

0 голосов
/ 30 апреля 2020

Работа с окнами не вступает в силу до тех пор, пока не будет преобразовано любое группирование. Вставка преобразования группировки, такого как группировка по ключу или перестановка между Window и ParDo, должна работать.

...