首页 > 解决方案 > Google Dataflow 和 Apache Beam:为什么选择 ValueProvider

问题描述

我对 Dataflow 很陌生,并尝试使用 Python 构建模板。

这是让我感到困惑的文件。

我们有什么理由使用 ValueProvider 吗?

我发现许多只使用 Python 的官方模板argparse

我什么时候应该使用哪种解决方案?

  1. 创建一个子类PipelineOptions并使用 ValueProvider
@classmethod
def _add_argparse_args(cls, parser):
    parser.add_value_provider_argument(
        "--input", dest="input", required=True, help="Input for the pipeline",
    )
    ...

或者 2.在块中使用argparse解析参数?if __nam__ == "__main__"

标签: pythongoogle-cloud-dataflowapache-beam

解决方案


使用ValueProviderthroughPipelineOptions而不是argparse直接用于参数的原因是启用运行时参数。了解这如何有用涉及了解运行时参数和构造时间参数之间的区别。正如数据流模板概述所述:

如果您使用 Dataflow 模板,则暂存和执行是单独的步骤。这种分离使您可以更灵活地决定谁可以运行作业以及从何处运行作业。

当您创建和暂存模板时,就会评估常规参数。因此,如果您argparse直接使用,或者您在PipelineOptionsthat use中有一些参数add_argument,则在您第一次调用模板代码以构建和暂存作业图时指定这些参数。因此,您通常只会运行一次来​​暂存作业,然后您可以重复执行该作业。

每当您执行已暂存的作业时,您都可以指定额外的运行时参数。与在构建管道时只指定一次的构建时间参数不同,运行时参数可以在每次运行分阶段作业时指定,因此可以更频繁地更改。但是,转换需要明确支持运行时参数,ValueProviders因为这是一个选项。

总而言之,是否使用 a 的决定ValueProvider取决于您在构建图形时或运行管道时是否需要参数。构建时间参数主要用于影响图形构建的参数,或者预计在多次运行作业时保持不变。每次运行作业时可能更改的参数(例如输入文件)应该是运行时参数(即ValueProviders),假设您使用的转换支持它。


推荐阅读