Apache Beam Go SDK 快速入门

此快速入门展示了如何使用 Apache Beam Go SDK 运行使用 示例管道,并使用 Direct Runner。Direct Runner 在你的机器上本地执行管道。

如果你有兴趣为 Apache Beam Go 代码库贡献代码,请查看 贡献指南

本页内容

设置你的开发环境

确保你已准备好 Go 开发环境。如果没有,请按照 下载和安装 页面中的说明进行操作。

克隆 GitHub 仓库

克隆或下载 apache/beam-starter-go GitHub 仓库,并进入 beam-starter-go 目录。

git clone https://github.com/apache/beam-starter-go.git
cd beam-starter-go

运行快速入门

运行以下命令

go run main.go --input-text="Greetings"

输出类似于以下内容

Hello
World!
Greetings

这些行可能以不同的顺序出现。

探索代码

此快速入门的主要代码文件是 main.go (GitHub)。代码执行以下步骤

  1. 创建 Beam 管道。
  2. 创建初始 PCollection
  3. 应用转换。
  4. 使用 Direct Runner 运行管道。

创建管道

在创建管道之前,请调用 Init 函数

beam.Init()

然后创建管道

pipeline, scope := beam.NewPipelineWithRoot()

NewPipelineWithRoot 函数返回一个新的 Pipeline 对象,以及管道的根作用域。作用域 是复合转换的层次结构分组。

创建初始 PCollection

PCollection 抽象表示一个潜在的分布式、多元素数据集。Beam 管道需要一个数据源来填充初始 PCollection。源可以是有界的(已知、固定大小)或无界的(大小无限制)。

此示例使用 Create 函数从字符串的内存中数组创建 PCollection。生成的 PCollection 包含字符串“hello”、“world!”和用户提供的输入字符串。

elements := beam.Create(scope, "hello", "world!", input_text)

将转换应用于 PCollection

转换可以更改、过滤、分组、分析或以其他方式处理 PCollection 中的元素。

此示例添加了 ParDo 转换,将输入字符串转换为标题大小写

elements = beam.ParDo(scope, strings.Title, elements)

ParDo 函数获取父作用域、将应用于数据的转换函数以及输入 PCollection。它返回输出 PCollection。

前面的示例使用内置的 strings.Title 函数进行转换。你也可以向 ParDo 提供一个应用程序定义的函数。例如

func logAndEmit(ctx context.Context, element string, emit func(string)) {
    beamLog.Infoln(ctx, element)
    emit(element)
}

此函数记录输入元素并返回相同元素,未经修改。为此函数创建 ParDo,如下所示

beam.ParDo(scope, logAndEmit, elements)

在运行时,ParDo 将对输入集合中的每个元素调用 logAndEmit 函数。

运行管道

前面部分显示的代码定义了一个管道,但尚未处理任何数据。要处理数据,请运行管道

beamx.Run(ctx, pipeline)

Beam 运行器 在特定平台上运行 Beam 管道。此示例使用 Direct Runner,如果未指定运行器,则为默认运行器。Direct Runner 在你的机器上本地运行管道。它用于测试和开发,而不是为效率优化。有关更多信息,请参阅 使用 Direct Runner

对于生产工作负载,你通常使用分布式运行器,该运行器在 Apache Flink、Apache Spark 或 Google Cloud Dataflow 等大数据处理系统上运行管道。这些系统支持大规模并行处理。

下一步

如果你遇到任何问题,请随时 联系我们