`GroupIntoBatches` 変換を用いた効率的な外部サービス呼び出しのための要素のグループ化
- Java SDK
- Python SDK
通常、Apache Beam パイプラインの作成は、*ParDo*、*Window*、*GroupByKey* などの標準のツールと変換を使用して行うことができます。ただし、より細かい制御が必要な場合は、ステートレスな *DoFn* に状態を保持できます。
状態はキーごと、ウィンドウごとに保持されるため、ステートフルな DoFn への入力にはキーを設定する必要があります(例:eコマース Web サイトからのクリック数を追跡する場合の顧客 ID)。
ユースケースの例としては、各要素に一意の ID を割り当てる、"より特殊な" 方法でデータストリームを結合する、外部サービスへの API 呼び出しをバッチ処理するなどがあります。このセクションでは、特に最後のユースケースについて説明します。
状態とタイマーの詳細については、ドキュメントをご確認ください。
`GroupIntoBatches` 変換は、内部で状態とタイマーを使用して、ユーザーが次のパラメーターを細かく制御できるようにします。
- `maxBufferDuration`:バッチが発行されるまでの待ち時間を制限します。
- `batchSize`:1 つのバッチの要素数を制限します。
- `batchSizeBytes`:(Java のみ)入力コーダーを使用して要素サイズを決定し、1 つのバッチのバイトサイズを制限します。
- `elementByteSize`:(Java のみ)ユーザー定義関数を使用して要素サイズを決定し、1 つのバッチのバイトサイズを制限します。
実装の詳細をユーザーから抽象化します。
`withShardedKey()` 機能は、1 つのキーを複数のスレッドに分散させることで並列性を向上させます。
これらの変換は、Java と Python で次のように使用されます。
これらの変換を適用すると、キーごとにバッチ単位で要素のグループが出力されます。これを使用して、要素ごとではなくまとめて外部 API を呼び出すことができるため、パイプラインのオーバーヘッドを削減できます。
最終更新日:2024/10/31
お探しのものはすべて見つかりましたか?
すべて役に立ち、明確でしたか?変更したい点はありますか?お知らせください!