Мой вопрос больше касается дизайна кода, который помог бы повысить производительность в 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 Луч.