Context
Я читаю файл из Google Storage в Beam, используя процесс, который выглядит примерно так:
data = pipeline | beam.Create(['gs://my/file.pkl']) | beam.ParDo(LoadFileDoFn)
Где LoadFileDoFn
загружает файл и создает список Pythonобъектов из него, которые ParDo
затем возвращаются как PCollection
.
Я знаю, что мог бы реализовать собственный источник для достижения чего-то похожего, но этот ответ и * 1013 Бима* собственная документация указывает на то, что этот подход с использованием псевдоданных для чтения через ParDo
не является редкостью, и пользовательские источники могут быть излишними.
Это также работает - я получаю PCollection
с правильным номеромэлементов, которые я могу обработать, как мне нравится!Однако ..
Проблемы с автоматическим масштабированием
В результате PCollection
вообще не масштабируется в облачном потоке данных.Сначала я должен преобразовать его следующим образом:
shuffled_data = data | beam.Shuffle()
Я знаю этот ответ Я также упомянул выше, объясняет в значительной степени этот процесс - но он не дает никакого представления о том, почему этонеобходимо.Насколько я вижу на очень высоком уровне абстракции в Beam, у меня есть PCollection
с N элементами до шаффла и аналогичное PCollection
после шаффла.Почему один масштабируется, а другой нет?
Документация не очень полезна в этом случае (или вообще, но это другое дело).Каким скрытым атрибутом обладает первый PCollection
, который препятствует его распространению среди нескольких работников, которого нет у другого?