#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. Я тоже целый день боролся с этой ошибкой, а затем нашел этот пост. Спасибо!