Конвейерная производительность суммирования PCololctions пользовательских типов - среднее и медиана свойств - PullRequest
0 голосов
/ 20 февраля 2020

My Apache -Beam / Dataflow конвейер создает ключевые PC-коллекции пользовательских типов из событий pub / sub. Результат предварительного суммирования теперь равен PCollection<KV<String, MyCustomObject>>. Далее мне нужно обобщить эти данные для отчетов. Коллекции структурированных объектов могут быть очень большими, поэтому возможны исключения нехватки памяти, если я не буду осторожен.

В документации я вижу, что утилиты Combine (Combine.globally with CombineFn) и CombineWithContext доступный. Тем не менее, документация и примеры кода все еще очень легки.

На этом последнем этапе моего конвейера - мне нужно суммировать эти большие PCollections, но они являются сложными структурированными объектами, и я не только вычисляю средние значения. Я также хочу рассчитать медиану некоторых свойств.

Я могу представить, как сэмплы работают в N рабочих экземплярах. Например, должна быть какая-то «средневзвешенная», рассчитываемая по рабочим экземплярам в рамках. Но это не будет работать для медианы. Для этого предназначен CombineWithContext? Должно ли сохраняться состояние срединных массивов с контекстом с боковым вводом / выводом? Или это может быть достигнуто другим способом, используя только Combine.globally?

Буду признателен за любые примеры кода.

1 Ответ

1 голос
/ 25 февраля 2020

Похоже, что преобразование ApproximateQuantile - это то, что вам нужно, если вы в порядке с получением приблизительной медианы.

Существует еще одно преобразование здесь , которое обеспечивает та же функциональность, которая основана на более продвинутом алгоритме.

...