При использовании модуля Beam IO ReadFromPubSub можете ли вы извлекать сообщения с атрибутами на Python? Неясно, поддерживается ли это

#python #google-cloud-pubsub #apache-beam-io

#python #google-cloud-pubsub #apache-beam-io

Вопрос:

Попытка извлекать сообщения с атрибутами, хранящимися в PubSub, в конвейер Beam. Мне интересно, была ли добавлена поддержка для Python, и именно поэтому я не могу их прочитать. Я вижу, что он существует на Java.

 pipeline_options = PipelineOptions()
pipeline_options.view_as(StandardOptions).streaming = True

pipeline = beam.Pipeline(options=pipeline_options)
messages = (pipeline | beam.io.ReadFromPubSub(subscription=subscription_name).with_output_types(bytes))

def printattr(element):
    print(element.attributes)


lines = messages | 'printattr' >> beam.Map(printattr)

result = pipeline.run()
result.wait_until_finish()
  

Ожидается, что вы сможете перечислять атрибуты- данные:

 b'Message number 1109'
-     attributes: {
-       "_comments": "nan",
-       "_direction": "SE",
-       "_fromst": "Harlem",
-       "_last_updt": "2019-03-20 21:11:02.0",
-       "_length": "0.56",
-       "_lif_lat": "41.9809967484",
-       "_lit_lat": "41.9787314076",
-       "_lit_lon": "-87.7964600566",
-       "_strheading": "W",
-       "_tost": "Oak Park",
  

но, похоже, я могу получить доступ только к информации, хранящейся в поле данных, а не к атрибутам.

Ответ №1:

После ознакомления с документацией: https://beam.apache.org/releases/pydoc/2.11.0/apache_beam.io.gcp.pubsub.html я смог увидеть дополнительный аргумент для передачи в ReadFromPubSub.

Необходимо установить ‘with_attributes= True’, в противном случае вы просто получите поля данных.

Надеюсь, это поможет кому-то еще, кто может застрять или просто устать 🙂

Комментарии:

1. Я тоже целый день боролся с этой ошибкой, а затем нашел этот пост. Спасибо!