python - Google Dataflow 和 Apache Beam:为什么选择 ValueProvider
问题描述
我对 Dataflow 很陌生,并尝试使用 Python 构建模板。
这是让我感到困惑的文件。
我们有什么理由使用 ValueProvider 吗?
我发现许多只使用 Python 的官方模板argparse
。
我什么时候应该使用哪种解决方案?
- 创建一个子类
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__"
解决方案
使用ValueProvider
throughPipelineOptions
而不是argparse
直接用于参数的原因是启用运行时参数。了解这如何有用涉及了解运行时参数和构造时间参数之间的区别。正如数据流模板概述所述:
如果您使用 Dataflow 模板,则暂存和执行是单独的步骤。这种分离使您可以更灵活地决定谁可以运行作业以及从何处运行作业。
当您创建和暂存模板时,就会评估常规参数。因此,如果您argparse
直接使用,或者您在PipelineOptions
that use中有一些参数add_argument
,则在您第一次调用模板代码以构建和暂存作业图时指定这些参数。因此,您通常只会运行一次来暂存作业,然后您可以重复执行该作业。
每当您执行已暂存的作业时,您都可以指定额外的运行时参数。与在构建管道时只指定一次的构建时间参数不同,运行时参数可以在每次运行分阶段作业时指定,因此可以更频繁地更改。但是,转换需要明确支持运行时参数,ValueProviders
因为这是一个选项。
总而言之,是否使用 a 的决定ValueProvider
取决于您在构建图形时或运行管道时是否需要参数。构建时间参数主要用于影响图形构建的参数,或者预计在多次运行作业时保持不变。每次运行作业时可能更改的参数(例如输入文件)应该是运行时参数(即ValueProviders
),假设您使用的转换支持它。
推荐阅读
- android - Android MediaPlayer:将外部视频文件中的帧渲染到背景相机帧上的纹理
- sql - timescaledb-tune 问题
- c# - Catel 和 TCP 连接
- html - 如何将 favicon 添加到 Hugo 网站
- android - 在项目“:app”中找不到任务“installDebug”(npx react-native run-android 问题)
- javascript - 如何将 JS 函数传递给 PHP 函数
- sql - SQL 查询错误 REGEXP_INSTR 表达式中带有括号
- botframework - 在 ms 团队中无需单击按钮即可生成任务模块
- python - 关于类型转换的基本python问题
- delphi - 如何更改 Tobject 变量的指针地址?