借助 Apache Beam YAML,您可以通过 Beam YAML 提供程序打包和重复使用转换。借助提供程序,您可以将转换封装到可重复使用的单元中,然后将其导入 Beam YAML 流水线。YAML、Python 和 Java Apache Beam 转换都可以以这种方式打包。
借助作业构建器,您可以从 Cloud Storage 加载提供程序,以便在作业中使用它们。
写作提供程序
Beam YAML 提供程序在 YAML 文件中定义。这些文件指定了所提供转换的实现和配置。单个提供程序的列表以 YAML 列表项的形式表示,并包含 type
和 config
键。Java 和 Python 提供程序还具有用于指定转换实现的 config
键。以 YAML 定义的提供程序实现以内嵌方式表示。
YAML 提供程序
YAML 提供程序将新的 YAML 转换定义为名称与转换定义的映射。例如,此提供程序定义了一个转换,用于将输入的字段平方:
- type: yaml
transforms:
SquareElement:
body:
type: chain
transforms:
- type: MapToFields
config:
language: python
append: true
fields:
power: "element ** 2"
YAML 提供程序还可以在转换定义中使用 config_schema
键指定转换参数,并使用 Jinja2 模板化来使用这些参数:
- type: yaml
transforms:
RaiseElementToPower:
config_schema:
properties:
n: {type: integer}
body:
type: chain
transforms:
- type: MapToFields
config:
language: python
append: true
fields:
power: "element ** {{n}}"
如果提供的转换函数作为来源,则必须设置 requires_inputs: false
:
- type: yaml
transforms:
CreateTestElements:
requires_inputs: false
body: |
type: Create
config:
elements: [1,2,3,4]
也可以定义复合转换:
- type: yaml
transforms:
ConsecutivePowers:
config_schema:
properties:
end: {type: integer}
n: {type: integer}
requires_inputs: false
body: |
type: chain
transforms:
- type: Range
config:
end: {{end}}
- type: RaiseElementToPower
config:
n: {{n}}
Python 提供程序
可以使用以下语法提供 Python 转换:
- type: pythonPackage
config:
packages:
- pypi_package>=version
transforms:
MyCustomTransform: "pkg.module.PTransformClassOrCallable"
如需查看深入示例,请参阅 GitHub 上的 Python 提供程序起始项目。
Java 提供程序
可以使用以下语法提供 Java 转换:
- type: javaJar
config:
jar: gs://your-bucket/your-java-transform.jar
transforms:
MyCustomTransform: "urn:registered:in:transform"
如需查看深入示例,请参阅 GitHub 上的 Java 提供程序起始项目。
在作业构建器中使用提供程序
可以在作业构建器中使用从 Cloud Storage 导入的提供程序中定义的转换。如需在作业构建器中使用提供程序,请执行以下操作:
在 Cloud Storage 中将提供程序保存为 YAML 文件。
前往 Google Cloud 控制台中的作业页面。
点击
通过构建器创建作业。找到 YAML Providers 部分。您可能需要滚动。
在 YAML 提供程序路径框中,输入提供程序文件的 Cloud Storage 位置。
等待提供程序加载。如果提供程序有效,则提供程序中定义的转换将显示在已加载的转换部分中。
在已加载的转换部分中找到转换的名称,然后点击
按钮将转换插入到作业中。如果转换需要参数,请在转换的 YAML 转换配置编辑器中定义这些参数。应将参数定义为将参数名称映射到参数值的 YAML 对象。
后续步骤
- 详细了解 Beam YAML 提供程序。