博客
2017/03/16
Apache Beam 0.6.0 版本发布 Python SDK
Apache Beam 的最新版本 0.6.0 引入了一个新的 SDK - 这次是针对 Python 编程语言的。Python SDK 与 Java SDK 一起成为 Beam 编程模型的第二个实现。
Python SDK 包含 Beam 模型的所有主要概念,包括 ParDo、GroupByKey、Windowing 等。它具有可扩展的 IO API 用于编写有界源和接收器,并提供用于读取和写入 Text、Avro 和 TensorFlow 记录文件的内置实现,以及与 Google BigQuery 和 Google Cloud Datastore 的连接器。
目前有两个运行器能够执行使用 Python SDK 编写的管道:Direct Runner 和 Dataflow Runner,它们目前都仅限于批处理执行。即将推出的功能将很快为更多运行器带来 Python SDK 的优势。
尝试 Apache Beam Python SDK
如果您想试用 Python SDK,一个好的起点是 快速入门。之后,您可以查看其他 示例,并深入研究 API 参考。
让我们一起看一个简单的例子。首先,从 PyPI 安装 apache-beam
包并启动您的 Python 解释器。
$ pip install apache-beam
$ python
我们将利用 Apache Beam 的强大功能来估计 Pi,以纪念最近过去的 Pi 日。
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()
此示例通过向单位正方形中投掷随机飞镖并跟踪落在单位圆内的飞镖的比例来估计 Pi(有关详细信息,请参见完整的 示例)。如果您好奇,可以通过查看输出文件来检查我们估计的结果。
$ cat pi_estimate.txt*
路线图
Python SDK 路线图上的第一件事是解决其两个限制。首先,现有的运行器目前仅限于有界 PCollection,我们期待将 SDK 扩展以支持无界 PCollection(“流”)。此外,我们正在努力扩展对更多 Apache Beam 运行器的支持,即将推出的 Fn API 将完成繁重的工作。
这两项改进都将使 Python SDK 能够实现 Apache Beam 的使命:一个统一的编程模型,用于批处理和流数据处理,可以运行在任何执行引擎上。
加入我们!
请考虑加入我们,无论是作为用户还是贡献者,因为我们正在努力实现我们的第一个具有 API 稳定性的版本。如果您想今天试用 Apache Beam,请查看最新的 0.6.0 版本。我们欢迎通过我们的邮件列表、问题跟踪器、拉取请求和活动从任何人那里获得贡献和参与。