Python を使用した Dataflow にまつわる誤解を解く
Google Cloud Japan Team
※この投稿は米国時間 2021 年 11 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud のフルマネージド データ処理サービスである Dataflow を利用する多くのデベロッパーが、まず決めなくてはいけないことは、どのプログラミング言語を使用するかということです。Dataflow のデベロッパーは、オープンソースの Apache Beam SDK を使用してパイプラインを作成しますが、使用する言語には Java、Python、Go、SQL、Scala、Kotlin といった選択肢があります。今回の記事では、急速に成長している言語の一つである Python について取り上げます。
Apache Beam 用 Python SDK は、2015 年に Dataflow の一般提供が発表された直後に導入され、大規模なお客様の一部で第一の選択肢となりました。しかし、前身である Java SDK に比べて不完全で劣っているという評価に悩まされてきました。これまでの状況を考えると、そのような認識は間違いではありませんでしたが、Python の機能セットは Java SDK に追いつき、Python デベロッパーに特化した新機能を提供しています。このブログの残りの部分では、Python SDK に関するよくある誤解についていくつか検証し、最後に Python SDK の最新情報について簡潔にレビューします。
誤解 1: Python はストリーミング パイプラインをサポートしていない
間違いです。Python 用ストリーミングのサポートは 2 年以上前から利用可能で、2019 年 10 月に Beam 2.16 の一部としてリリースされました。つまり、Streaming Engine、アップデート、ドレイン、スナップショットなど、ストリーミング Dataflow が備える独自の機能のすべてが Python ユーザーに提供されています。
誤解 2: Python では SqlTransform が使えない
間違いです。データストリームを結合するための面倒なコードを書くことにうんざりしていませんか?Python 用 SqlTransform を使用してください。昨年、Apache Beam では、多言語パイプラインの進歩の一端として、Python SDK に SqlTransform のサポートを導入しました(詳細は後述します)。利用方法はこちらの例をご覧ください。
誤解 3: Python では State API と Timer API が使えない
間違いです。Beam SDK の最も強力な機能は、State API と Timer API で、ウィンドウやトリガーよりも細やかな集計の制御を可能にします。この API は Python で利用でき、最も一般的なユースケースに対して Java SDK と同等の機能を提供します。この API の使用例は、Beam プログラミング ガイドをご参照ください。
誤解 4: Python でサポートされている I/O は限られている
間違いです。Java SDK と Python SDK の最も明白な違いは、Dataflow パイプラインの読み取りと書き込みのオペレーションを容易にするI/O コネクタの違いです。多言語パイプラインのサポートによって、このような誤解は覆りました。言語間変換を使用して、Python パイプラインは、Java ベースの I/O コネクタのライブラリ全体へのアクセスを提供するために、内部で Java の変換を呼び出すことができます。実際、このようにして Python 用の KafkaIO モジュールを実装しました(例を参照)。デベロッパーは、パターン ライブラリの手順に従って、独自の言語間変換を呼び出すことができます。
誤解 5: Python はコードサンプルが少ない
これは一部合っています。Apache Beam では、Python のサンプルのためにスニペット、ノートブックの例、さらに完全な例といったリポジトリを備えています。ただし、Python にはないものがいくつかあります。具体的には、Dataflow テンプレートのリポジトリです。これは、Dataflow の初期ユーザーの多くが Java デベロッパーだったことに起因します。しかし、判断を急いでしまうと 2 つの重要な次の要素を無視することになります。1)Python デベロッパーだけが持つ独自のアセット、2)Beam Python コミュニティの大きな推進力。
Python デベロッパーは、JupyterLab ノートブック環境で探索的なコードを書くことを好みます。Beam では、Beam の Python パイプラインを Jupyter ノートブックでインタラクティブに構築し実行できるインタラクティブ モジュールが提供されています。Beam ノートブックを使用すると、このようなノートブックを簡単にデプロイできます。これにより、パイプラインのプロトタイプを作成するために必要な Beam ライブラリをすべて含むマネージド ノートブックを起動します。また、ストリーミング ソースからデータをサンプリングする方法や、ノートブックに GPU をアタッチして処理を高速化する方法など、参考になる例やチュートリアルを多数ご用意しています。またノートブックでは、新しい Beam デベロッパー向けに、基本的なオペレーション、集計、ストリーミングのコンセプトなどを網羅した学習トラックをご提供しています。ドキュメントはこちらからご確認いただけます。
過去数年にわたって、Beam Python SDK の上に構築された多くの拡張機能を見てきました。Cruise Automation は、Terra ライブラリを公開しました。これにより、Cruise のデータ サイエンティスト 70 人以上が、基盤となるインフラストラクチャを理解しなくてもジョブを送信できるようになりました。Spotify は、Beam Python の上に構築され、オーディオやメディア ファイルの処理に必要な一般的なタスクを簡素化するフレームワークである Klio をオープンソース化しました。リレーショナル データベースとの読み取りと書き込みに使用される Beam Python 変換のシンプルなコレクションである beam-nuggets をお客様にご紹介したこともあります。オープンソースのデベロッパーや大規模な組織は Beam Python を強化させていて、このような簡単な例を見てもその傾向は明らかです。
最新情報:
Dataflow チームは、Python デベロッパーによるユースケースのさらなる活用を助ける新機能を多数ご用意しています。最新の機能を簡単にご紹介します。
カスタム コンテナ: ユーザーは、Dataflow ジョブの起動時に、独自のコンテナ イメージを指定できるようになりました。これは、パイプライン コードを独自のライブラリや依存関係でパッケージ化することを好む Python ユーザーからよくいただくご要望でした。この機能の一般提供の開始をお知らせいたします。ドキュメントを確認し、ぜひお試しください。
GPU: つい先日、Dataflow における GPU サポートの一般提供を発表しました。Dataflow ジョブに GPU をプロビジョニングすることで、データ処理の高速化が実現しました。これも、Dataflow に関わる機械学習の実務担当者からよくいただくご要望でした。リリースの詳細はこちらからご確認ください。
Beam DataFrames: Beam DataFrames によって、Beam SDK に pandas の魅力がもたらされ、デベロッパーが PCollection を DataFrame に変換し、pandas DataFrame API で利用可能な標準メソッドが使用できるようになります。DataFrames では、デベロッパーがデータセットを操作し、パイプラインを作成するのにより適した方法を提供します。そしてこれは、将来の効率向上への足がかりとなるでしょう。Beam DataFrames の一般提供は、8 月にリリースされた Beam 2.32 から利用可能です。Beam DataFrames についての詳細はこちらをご覧ください。
ぜひ、Beam ノートブックを使用して今すぐ新機能をお試しください。
Beam コミュニティで共有したい面白いアイデアをお持ちの場合は、さまざまな方法でお問い合わせいただけます。こちらをご確認ください。Beam Python の次の展開にも期待しましょう。
- Dataflow プロダクト マネージャー Mehran Nazir



