CoGroupByKey, выбрасывать после группировки n записей - PullRequest
2 голосов
/ 10 марта 2020

Я пытаюсь распараллелить некоторые более тяжелые вычисления, например, так:

inputs = (p | "Read" >> beam.io.ReadFromAvro('/mypath/myavrofiles*')
            | "Generate Key" >> beam.Map(lambda row: (gen_key(row), row)))

calc1_results = inputs | "perform calc1" >> beam.Pardo(Calc1())
calc2_results = inputs | "perform calc2" >> beam.Pardo(Calc2())

combined = (({"calc1": calc1_results, "calc2": calc2_results})
            | beam.CoGroupByKey()
            | beam.Values())

final = combined | "Use Grouped results" >> beam.ParDo(PerformFinalCalculation())
  • Каждое тяжелое значение c испускает (key, result)
  • Каждая клавиша уникальна для каждого ввода , Один вход, один результат, один ключ

Есть ли какой-нибудь способ испускания из CoGroupByKey после того, как для каждого ключа был собран один result1 / result2?

В конечном итоге я хотел бы достичь чего-то вроде:


               +------------+
               |            |
               |   Input    |
               |            +-----------------+
               +------------+                 |
                     |                        |
          v-------------------v               |
  +------------+       +------------+         |
  |            |       |            |         |
  |  Heavy     |       |   Heavy    |         |
  |  Calc 1    |       |   Calc 2   |         |
  |            |       |            |         |
  +------------+       +------------+         |
             |            |                   |
             |            |                   |
             |            |                   |
          +--v------------v--+                |
          |      Merged      |                |
          |  original dict,  +<---------------+
          |result 1, result2 |
          |                  |
          +------------------+

...