#google-cloud-dataflow
#google-облако-поток данных
Вопрос:
У меня есть несколько пользовательских функций объединения, которые я вызываю как таковые:
например, у меня есть «данные», рассчитанные ранее в конвейере.
cd1 = data | customCombFn1()
cd2 = data | customCombFn2()
cd3 = data | customCombFn3()
Как работает конвейер в приведенном выше случае? Вычисляются ли «данные» снова и снова? Или cd1
, cd2
, и cd3
оцениваются как побочный продукт конвейера?
Ответ №1:
Ваш data
объект — это PCollection. Применение преобразования объединения к PCollection создает другую PCollection, чаще всего содержащую гораздо меньше элементов.
Не было бы никакой «переоценки», как вы это называете. Сбор данных обычно производится на нескольких рабочих устройствах и немедленно используется преобразованиями, которые в нем нуждаются. Если это невозможно в данном случае, PCollection обычно сохраняется для обработки на более позднем этапе.
Вообще говоря, служба облачных потоков данных автоматически применяет оптимизации к конвейеру пользователей. В большинстве случаев, включая этот, это позволяет пользователям сосредоточиться на своей бизнес-логике, а не на основных соображениях выполнения.
Комментарии:
1. таким образом, нет встроенных оптимизаций для объединения customCombFn1, customCombFn2 и customCombFn3 в качестве агрегатора dict, верно? Есть ли какая-нибудь статья или блог, в которых описывается то же самое? Я предположил, что приведенный выше код был сродни трехкратному просмотру полных данных, поскольку у меня есть три операции объединения.
2. Это сложнее, чем это. Служба потоков данных применяет несколько типов оптимизаций в зависимости от структуры конвейера. Иногда часть преобразования объединения «переносится» в предыдущие части конвейера, или переупорядочивается, или оптимизируется каким-либо другим способом. В общем, мы стараемся выполнять преобразования объединения как можно скорее, поскольку это уменьшает объем данных и обычно ускоряет конвейер.