CombinePerKey
![]() |
コレクション内の各キーについてすべての要素を結合します。
Beamプログラミングガイドで詳細情報をご覧ください。
例
次の例では、農産物の`PCollection`を持つパイプラインを作成します。その後、`CombinePerKey`を複数の方法で適用して、`PCollection`内のすべての要素を結合します。
`CombinePerKey`は、入力として値のリストを受け取り、各キーに対してそれらを結合する関数を受け入れます。
例1:事前定義関数を使用した結合
数値の`iterable`を受け取り、それらを合計する`sum`関数を使用します。
例2:関数を使用した結合
事前定義された最大数まで数値の`iterable`を受け取り、それらを合計する`saturated_sum`関数を定義します。
例3:ラムダ関数を使用した結合
**例2**を簡素化するために、ラムダ関数を使用することもできます。
例4:複数の引数を使用した結合
`CombinePerKey`には、複数の引数を持つ関数を渡すことができます。それらは、関数の追加の位置引数またはキーワード引数として渡されます。
この例では、ラムダ関数は`values`と`max_value`を引数として受け取ります。
例5:`CombineFn`を使用した結合
要素を結合するより一般的な方法、そして最も柔軟な方法は、`CombineFn`を継承するクラスを使用することです。
`CombineFn.create_accumulator()`:空のアキュムレータを作成します。たとえば、合計の空のアキュムレータは`0`であり、積(乗算)の空のアキュムレータは`1`です。
`CombineFn.add_input()`:要素ごとに1回呼び出されます。アキュムレータと入力要素を受け取り、それらを結合して更新されたアキュムレータを返します。
`CombineFn.merge_accumulators()`:複数のアキュムレータを並列処理できるため、この関数はそれらを単一のアキュムレータにマージするのに役立ちます。
`CombineFn.extract_output()`:結果を抽出する前に追加の計算を実行できます。
関連トランスフォーム
次のコンバイナートランスフォームを使用できます。
GroupByも参照してください。これにより、一度に複数のフィールドを結合できます。
![]() |
最終更新日:2024/10/31
必要な情報は見つかりましたか?
すべて役に立ち、分かりやすかったですか?変更したい点があれば教えてください!