Луч Python SDK - save_main_session - импорт DoFn - каковы лучшие практики? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть вопрос о save_main_session и передовых методах, и, пожалуйста, дайте мне знать, если где-нибудь есть документ, который охватывает этот вопрос.Таким образом, с save_main_session, установленным на False, если мой DoFn в методе process использует, например, стандартный модуль lib copy, API-интерфейс Beam FileSystems или мой пользовательский модуль, если я импортирую их на уровне модуля(верхняя часть файла), в которой определен DoFn, произойдет сбой в службе потока данных с ошибкой, которая говорит о том, что модуль copy (и т. д.) не был найден из метода process (что все имеет смысл),и я мог бы исправить это либо:

  1. импорт copy внутри метода процесса
  2. "сохранение" copy ссылки / объекта в качестве поля / поставщика / и т. д. в DoFn экземпляр
  3. установка save_main_session на True

Я не хочу устанавливать save_main_session на True, потому что afaiu захватывает весь основной сеанс, и у меня естькуча объектов, которые там не сериализуются, и в целом save_main_session вонючий и хакерский.Первый вариант тоже вонючий и не всегда работает - импорт импортируется в кеш, поэтому производительность должна быть приемлемой - но это не сработает для моих пользовательских модулей сразу (если я не установлю / не отправлю их явно рабочим).И, наконец, 2-й вариант довольно хакерский - работа вокруг фреймворка Beam.

Я склоняюсь в основном ко 2-му варианту, но это просто нехорошо, потому что нельзя просто использовать глобальный импорт и обойти его.добавление и использование полей экземпляра.

Каков наилучший метод решения этой проблемы?Я знаю, что примеры предлагают установить save_main_session на True, но это опять-таки имеет последствия и просто пахнет.Есть ли лучшие варианты?

1 Ответ

0 голосов
/ 05 июня 2019

Класс DoFn поставляется с методом setup, который вызывается один раз для DoFn экземпляра. Вы можете переопределить этот метод и выполнить там импорт.


Как примечание, этот метод доступен в выпуске Beam's Python для 2.13.0. Если вы используете более раннюю версию, вы можете переопределить start_bundle в вашем DoFn, чтобы выполнить там импорт.

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