Apache Beam 0.6.0 で Python SDK がリリースされました

Apache Beam の最新リリース、バージョン0.6.0では、新しいSDKが導入されました。今回は、Pythonプログラミング言語用です。Python SDKは、Java SDKに続き、Beamプログラミングモデルの2番目の実装となります。

Python SDKは、ParDo、GroupByKey、Windowingなど、Beamモデルの主要な概念をすべて組み込んでいます。バインドされたソースとシンクを記述するための拡張可能なIO APIを備え、テキスト、Avro、TensorFlowレコードファイルの読み書き、およびGoogle BigQueryとGoogle Cloud Datastoreへのコネクタの組み込み実装を提供します。

現在、Python SDKで記述されたパイプラインを実行できるランナーは2つあります。Direct RunnerDataflow Runnerです。どちらも現在、バッチ実行のみに限定されています。今後の機能により、Python SDKのメリットが追加のランナーにもすぐに提供される予定です。

Apache Beam Python SDK を試してみましょう

Python SDK を試してみたい場合は、クイックスタートから始めるのが良いでしょう。その後、追加のを確認し、APIリファレンスを深く掘り下げることができます。

簡単な例を一緒に見てみましょう。まず、PyPIからapache-beamパッケージをインストールし、Pythonインタプリタを起動します。

$ pip install apache-beam
$ python

最近過ぎた円周率の日にちなんで、Apache Beamの力を活用して円周率を推定します。

import random
import apache_beam as beam

def run_trials(count):
  """Throw darts into unit square and count how many fall into unit circle."""
  inside = 0
  for _ in xrange(count):
    x, y = random.uniform(0, 1), random.uniform(0, 1)
    inside += 1 if x*x + y*y <= 1.0 else 0
  return count, inside

def combine_results(results):
  """Given all the trial results, estimate pi."""
  total, inside = sum(r[0] for r in results), sum(r[1] for r in results)
  return total, inside, 4 * float(inside) / total if total > 0 else 0

p = beam.Pipeline()
(p | beam.Create([500] * 10)  # Create 10 experiments with 500 samples each.
   | beam.Map(run_trials)     # Run experiments in parallel.
   | beam.CombineGlobally(combine_results)      # Combine the results.
   | beam.io.WriteToText('./pi_estimate.txt'))  # Write PI estimate to a file.

p.run()

この例では、単位正方形にランダムなダーツを投げ、単位円に落ちたダーツの割合を追跡することで円周率を推定します(詳細については、完全なを参照)。興味があれば、出力ファイルを見て、推定の結果を確認できます。

$ cat pi_estimate.txt*

ロードマップ

Python SDKのロードマップの最初の課題は、その2つの制限に対処することです。まず、既存のランナーは現在、バインドされたPCollectionに限定されており、アンバインドされたPCollection(「ストリーミング」)をサポートするようにSDKを拡張することを楽しみにしています。さらに、より多くのApache Beamランナーへのサポートを拡張することに取り組んでおり、今後のFn APIが重い処理を行います。

これらの改善により、Python SDKは、Apache Beamのミッションである、任意の実行エンジンで実行できるバッチおよびストリーミングデータ処理のための統合プログラミングモデルを実現できるようになります。

ご参加ください!

APIの安定性を備えた最初のリリースに向けて取り組んでいますので、ユーザーまたは貢献者としてご参加いただければ幸いです。今日Apache Beamを試してみたい場合は、最新の0.6.0リリースをチェックしてください。メーリングリスト、課題追跡、プルリクエスト、およびイベントを通じて、どなたでも貢献と参加を歓迎します。