python-3.x - apache_beam.io.WriteToText() 文件名作为模板参数
问题描述
我在 DataFlow 上执行了一个 apache_beam 模板。我需要将要写入的文件的名称作为模板参数传递。就像是
gcloud dataflow jobs run JOB_NAME \
--gcs-location gs://YOUR_BUCKET_NAME/templates/MyTemplate \
--parameters output_file_name=OUTPUT_NAME , input_file_name=INPUT_NAME
的值output_file
可以通过 PipelineOptions 访问,例如
class MyOptions(PipelineOptions):
@classmethod
def _add_argparse_args(cls,parser):
parser.add_value_provider_argument('--output_file_name', type=str,
help='Output Name')
parser.add_value_provider_argument('--input_file_name', type=str,
help='Input Name')
如果我需要output_name
在这样的apache_beam.io.WriteToText
东西中使用
optlist=PipelineOptions()
my_options=optlist.view_as(MyOptions)
p = apache_beam.Pipeline(options=optlist)
(p
| 'create' >> apache_beam.Create(["1","2","3"])
| beam.io.WriteToText(my_options.output_file_name.get())
)
p.run()
这是不允许的,因为我们my_options.output_name.get()
只能作为运行时值读取,如果我们尝试将此代码部署为模板,则会引发错误。
考虑到这是一个非常常见的用例,我认为可能有一个通用的库或解决方案。有人有工作吗?
解决方案
您可以将Flex 模板用于此类情况。在从模板创建管道时,它们对哪些参数可以变化没有任何限制。
推荐阅读
- c# - 如何根据状态码创建动态自定义错误页面?
- excel - 在工作表上创建一个按钮以运行 vba 代码
- python - 求导数的二阶精确方案
- excel - 当我打开不同的 Excel 工作簿时,VBA 范围(“A1”)命令不起作用
- r - 如何使用 R 从 URL 链接获取数据
- angular - Ionic 5 重新加载页面
- javascript - 如何在组件方法中等待来自父级的数据
- typescript - 使用 TypeScript 在 Google 上操作:如何开始?
- java - Gif 在 jpanel GUI 的背景中没有“移动”并覆盖 jbuttons
- excel - 带有链接到按钮的宏的工作簿保护正在阻止电源查询完成其负载