как перераспределить лучшую обработку для Apache Beam? - PullRequest
0 голосов
/ 03 мая 2020

Мой вопрос больше касается дизайна кода, который помог бы повысить производительность в Apache Beam.

Контекст:

У меня есть несколько файлов (тысячи файлов) размером около 1 МБ или меньше, хранится в «исходной корзине GCP».

Используя Apache Beam, я должен прочитать эти файлы, обработать их ( включает путь к входному файлу, обогатить их, создайте новые поля, рассчитанные из других полей, ...), затем для каждого файла на входе я должен написать файл на выходе.

Формат файлов (вход и выход) - Parquet.

Я хотел бы воспользоваться Apache Beam. Итак, я подумал о 2-х сценариях ios (и, возможно, лучше, чем эти 2).

первый дизайн кода делает oop для входных файлов, а затем для каждый файл, он читает файл, обрабатывает содержимое, а затем записывает соответствующий файл в целевое ведро. В результате для каждого входного файла будет PCollection. Эта PCollection получит другую бизнес-обработку, после чего будет написана. Что мне не нравится в этом сценарии, так это то, что обработка файлов будет повторяться.

Второй дизайн , имеет больше шагов (что плохо), но в определенный момент я даю Apache Лучи мощь перераспределения обработки и данных по своему усмотрению. На первом этапе я обязан l oop при чтении файлов, потому что мне нужно получить информацию о входном пути, который должен присутствовать в выходном пути. И так же, как и в первом проекте, у меня есть PCollection для каждого файла, к которому я делаю карту для добавления информации о пути. Затем я объединяю все PCollections и выполняю всю другую обработку, вычисления, обогащение ... Затем я делю PCollection, используя информацию о пути, на несколько выходных PCollections, затем записываю каждую PCollection в целевое ведро.

Ясно ни один из 2 сценариев ios не подойдет для производительности. Первый процесс сбор за сбором для каждого шага. Второй имеет итеративные и не итеративные шаги (обработка объединенной PCollection). Но я могу себе представить, что слияние и перераспределение огромны и могут привести к большим перетасовкам.

Как мне улучшить дизайн кода?

Большое спасибо

PS: я использую Python SDK Apache Луч.

The 2 code designs

...