Работа с потоком данных: объединение функций

#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. Это сложнее, чем это. Служба потоков данных применяет несколько типов оптимизаций в зависимости от структуры конвейера. Иногда часть преобразования объединения «переносится» в предыдущие части конвейера, или переупорядочивается, или оптимизируется каким-либо другим способом. В общем, мы стараемся выполнять преобразования объединения как можно скорее, поскольку это уменьшает объем данных и обычно ускоряет конвейер.