`GroupIntoBatches` 変換を用いた効率的な外部サービス呼び出しのための要素のグループ化

通常、Apache Beam パイプラインの作成は、*ParDo*、*Window*、*GroupByKey* などの標準のツールと変換を使用して行うことができます。ただし、より細かい制御が必要な場合は、ステートレスな *DoFn* に状態を保持できます。

状態はキーごと、ウィンドウごとに保持されるため、ステートフルな DoFn への入力にはキーを設定する必要があります(例:eコマース Web サイトからのクリック数を追跡する場合の顧客 ID)。

ユースケースの例としては、各要素に一意の ID を割り当てる、"より特殊な" 方法でデータストリームを結合する、外部サービスへの API 呼び出しをバッチ処理するなどがあります。このセクションでは、特に最後のユースケースについて説明します。

状態とタイマーの詳細については、ドキュメントをご確認ください。

`GroupIntoBatches` 変換は、内部で状態とタイマーを使用して、ユーザーが次のパラメーターを細かく制御できるようにします。

実装の詳細をユーザーから抽象化します。

`withShardedKey()` 機能は、1 つのキーを複数のスレッドに分散させることで並列性を向上させます。

これらの変換は、Java と Python で次のように使用されます。

input.apply(
          "Batch Contents",
          GroupIntoBatches.<String, GenericJson>ofSize(batchSize)
              .withMaxBufferingDuration(maxBufferingDuration)
              .withShardedKey())
input | GroupIntoBatches.WithShardedKey(batchSize, maxBufferingDuration)

これらの変換を適用すると、キーごとにバッチ単位で要素のグループが出力されます。これを使用して、要素ごとではなくまとめて外部 API を呼び出すことができるため、パイプラインのオーバーヘッドを削減できます。