CoGroupByKey

Pydoc Pydoc




依據鍵值彙總所有輸入元素,並允許下游處理使用與鍵值相關的所有值。雖然 GroupByKey 在單一輸入集合上執行此操作,因此只處理單一類型的輸入值,但 CoGroupByKey 會在多個輸入集合上執行。因此,每個鍵值的結果是元組,其中包含每個輸入集合中與該鍵值相關的值。

請參閱Beam 程式設計指南以瞭解更多資訊。

範例

在以下範例中,我們建立一個具有兩個農產品 PCollection 的 Pipeline,一個包含圖示,另一個包含持續時間,兩者都具有農產品名稱的通用鍵值。然後,我們套用 CoGroupByKey 以使用其鍵值聯結這兩個 PCollection

CoGroupByKey 預期一個具名的鍵值 PCollection 字典,並產生由其鍵值聯結的元素。每個輸出元素的值都是字典,其中名稱對應於輸入字典,並包含該鍵值的所有值清單。

import apache_beam as beam

with beam.Pipeline() as pipeline:
  icon_pairs = pipeline | 'Create icons' >> beam.Create([
      ('Apple', '🍎'),
      ('Apple', '🍏'),
      ('Eggplant', '🍆'),
      ('Tomato', '🍅'),
  ])

  duration_pairs = pipeline | 'Create durations' >> beam.Create([
      ('Apple', 'perennial'),
      ('Carrot', 'biennial'),
      ('Tomato', 'perennial'),
      ('Tomato', 'annual'),
  ])

  plants = (({
      'icons': icon_pairs, 'durations': duration_pairs
  })
            | 'Merge' >> beam.CoGroupByKey()
            | beam.Map(print))

輸出

('Apple', {'icons': ['🍎', '🍏'], 'durations': ['perennial']})
('Carrot', {'icons': [], 'durations': ['biennial']})
('Tomato', {'icons': ['🍅'], 'durations': ['perennial', 'annual']})
('Eggplant', {'icons': ['🍆'], 'durations': []})
Pydoc Pydoc