Используя Apache Beam, я делаю вычисления - и если они получатся успешными, я бы хотел записать вывод в один приемник, а в случае сбоя я бы хотел записать это в другой приемник.
Есть ли способ обработки метаданных или контентной маршрутизации в Apache Beam?
Я широко использовал Apache Camel, и поэтому, основываясь на результатах предыдущего преобразования, я должен направить сообщение в другой приемник, используя router (возможно, определяется флагом метаданных Я установил на заголовок сообщения). Есть ли аналогичная возможность с Apache Beam, или вместо этого у меня было бы просто последовательное преобразование, которое проверяет PCollection и обрабатывает запись в приемники внутри преобразования?
В идеале я хотел бы, чтобы эта логика (написана для большей ясности)
result = my_pcollections | 'compute_stuff' >> beam.Map(lambda (pcollection): my_compute_func(pcollection))
result | ([success_failure_router]
| 'sucess_sink' >> beam.io.WriteToText('/path/to/file')
| 'failure_sink' >> beam.io.WriteStringsToPubSub('mytopic'))
Однако .. Я подозреваю, что способ обработки луча - это
result = my_pcollections | 'compute_stuff' >> beam.Map(lambda (pcollection): my_compute_func(pcollection))
result | 'write_results_appropriately' >> write_results_appropriately(result))
...
def write_results_appropriately(result):
if result == ..:
# success, write to file
else:
# failure, write to topic
Спасибо,
Kevin