当前位置: 首页 > 知识库问答 >
问题:

apache_beam.io.writeToText()作为模板参数的文件名称

裴姚石
2023-03-14

我在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')
    

如果需要在apache_beam.io.writeToText中使用output_name

   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()作为运行时值读取,如果我们试图将此代码部署为模板,就会引发错误。

考虑到这是一个非常常见的用例,我假设可能有一个通用的库或解决方案。有人在附近工作吗?

共有1个答案

勾裕
2023-03-14

对于这种情况,您可以使用Flex模板。当从模板创建管道时,他们对哪些参数可以改变没有任何限制。

 类似资料:
  • 我目前有一个,但是为了灵活性,我希望能够分配一个lambda表达式,将作为映射中的值返回。 所以我创建了这个模板类: 并像这样使用它: IntelliSense提供了更多信息: 多个操作符“=”匹配这些操作数:function“valueorfunction::operator=(const std::function&other)[with T=std::wstring]”function“va

  • 另一个有用的可能示例:(伪代码)

  • 标准中似乎没有规则提到模板参数需要默认参数的情况。 在dcl中。fct。默认值#1 如果在参数声明中指定了初始化子句,则将此初始化子句用作默认参数。缺省参数将用于缺少尾随参数的调用。 在本节中,规则明确描述了何时为函数调用提供默认参数。但是,我在标准中没有找到与上面描述何时提供默认参数作为模板参数的语句类似的引用。 例如

  • 如何在谷歌VPC项目中运行的谷歌数据流模板中传递/设置“usepublicips”作为运行时参数?

  • 问题内容: 我当前的目录结构如下所示: 该文件用于在期间读入模板文件。 单元测试按预期工作。但是,我现在正在尝试对其进行单元测试,并且都将其导入,并且在尝试打开时会感到恐慌。 我尝试将模板名称指定为相对目录(“ ./foo.tmpl”),完整目录(“〜/ go / src / github.com / App / Template / foo.tmpl”),相对于应用程序目录(“ /App/Tem

  • 问题内容: 我在SQL表中有一些列,例如text_en,text_es,text_de。现在,我只想根据语言从一列中检索值。因此,我创建了一个sql字符串, 并在vb代码中使用了 sql,但是sql返回了该列的名称,而不是该列的值。我如何获得价值? 问题答案: 你也可以