Ошибка потока данных: «Клиенты имеют нетривиальное состояние, которое является локальным и недоступным для выбора» - PullRequest
0 голосов
/ 30 мая 2018

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

    'Clients have non-trivial state that is local and unpickleable.'
     PicklingError: Pickling client objects is explicitly not supported.

Я полагаю, что исправил это путем понижения до apache-beam = 2.3.0 Тогда локально это работало бы отлично.

Теперь я использую DataflowRunner и в файле needs.txt у меня есть следующие зависимости

    apache-beam==2.3.0
    google-cloud-bigquery==1.1.0
    google-cloud-core==0.28.1
    google-cloud-datastore==1.6.0
    google-cloud-storage==1.10.0
    protobuf==3.5.2.post1
    pytz==2013.7

, но я снова получаю эту страшную ошибку

    'Clients have non-trivial state that is local and unpickleable.'
     PicklingError: Pickling client objects is explicitly not supported.

Почему получилось сообщение об ошибке с DataflowRunner, но не с DirectRunner?не должны ли они использовать одни и те же зависимости / среду?Любая помощь будет оценена.

Я читал, что это способ решить эту проблему, но когда я пробую это, я все еще получаю ту же ошибку

    class MyDoFn(beam.DoFn):

        def start_bundle(self, process_context):
            self._dsclient = datastore.Client()

        def process(self, context, *args, **kwargs):
        # do stuff with self._dsclient

от https://github.com/GoogleCloudPlatform/google-cloud-python/issues/3191

Мои предыдущие ссылкипост, где я исправил это локально:

Использование start_bundle () в работе Apache-Beam не работает.Непередаваемое хранилище. Клиент ()

Заранее спасибо!

...