Apache BeamにおけるParDoとDoFnの実装の詳細
Apache BeamのParDoとDoFnの実装詳細
初心者向けのコードの詳しい説明
以前のチュートリアルで、Apache Beamの一般的な変換関数であるmap、filter、およびcombinePerKey()についてチュートリアルを作成しました。このチュートリアルでは、もう1つのMapのやり方であるParDo変換について説明します。ただし、ParDoは各PCollectionに対して変換を適用し、ゼロ個以上の要素を出力PCollectionに返します。一方、Map変換は入力要素ごとに正確に1つの要素を出力します。そのため、ParDoは多くの柔軟性を提供してくれます。
ParDo変換のもう1つの重要な側面は、DoFnの形式でユーザーコードを必要とすることです。いくつかの例を見てみましょう。
この公開データセットをダウンロードして、一緒に進めてください:
サンプルセールスデータ | Kaggle
このコードではGoogle Colabノートブックを使用して作業しているため、インストールが非常に簡単です。以下にインストールするためのコードを示します:
!pip install --quiet apache_beam
データという名前のディレクトリを作成し、使用するCSVファイルと今日の演習の出力を置くためのディレクトリを作成しました。
mkdir -p data
まず、データセットの最も単純な部分から取り組みます。データセットの各行をリスト化し、テキストファイルに出力します。
ビームパイプラインでテキストファイルを読み込むことは非常にシンプルで直感的です。CSVファイルを使用しているので、このためにCustomCoder()クラスを定義します。このクラスは、オブジェクトをバイト文字列にエンコードし、バイトをオブジェクトにデコードし、最後にコーダーが値を決定論的にエンコードすることを保証するかどうかを指定します。コーダーのドキュメントはこちらです。
from apache_beam.coders.coders import Coderclass CustomCoder(Coder): """文字列をUTF-8として読み書きするためのカスタムコーダー。""" def encode(self, value): return value.encode("utf-8", "replace") def decode(self, value): return value.decode("utf-8", "ignore") def is_deterministic(self): return True
また、Pythonの.split()関数を単純に使用するSplitRow()クラスもあります。
class SplitRow(beam.DoFn): def process(self, element)…
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles