Зачем мне перетасовывать мою коллекцию ПК, чтобы она автоматически масштабировалась в облачном потоке данных? - PullRequest
0 голосов
/ 21 декабря 2018

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, который препятствует его распространению среди нескольких работников, которого нет у другого?

1 Ответ

0 голосов
/ 21 декабря 2018

Когда вы читаете через Create, вы создаете PCollection, которая привязана к 1 работнику.Поскольку нет никаких ключей, связанных с элементами, нет механизма для распределения работы.Shuffle () создаст K, V под крышками, а затем перетасует, что позволяет распределять элементы PCollection новым работникам по мере их раскрутки.Вы проверяете это поведение, отключая автоматическое масштабирование и устанавливая размер рабочего, скажем, 25 - без Shuffle вы увидите только 1 работающего, выполняющего работу.

Другим способом распространения этой работы при создании / чтении будет создание собственного пользовательского ввода-вывода для чтения файлов PKL 1 .Вы бы создали соответствующий сплиттер;однако, не зная, что вы мариновали, его нельзя разделить.IMO Shuffle () - это безопасная ставка, по модулю которой вы получаете оптимизацию, если пишете читаемый сплит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...