如何使用“add_value_provider_argument”来初始化运行时参数?

3
以官方文档“创建模板”为例: https://cloud.google.com/dataflow/docs/templates/creating-templates
class WordcountOptions(PipelineOptions):
@classmethod
def _add_argparse_args(cls, parser):
  # Use add_value_provider_argument for arguments to be templatable
  # Use add_argument as usual for non-templatable arguments
  parser.add_value_provider_argument(
      '--input',
      default='gs://dataflow-samples/shakespeare/kinglear.txt',
      help='Path of the file to read from')
  parser.add_argument(
      '--output',
      required=True,
      help='Output file to write results to.')

pipeline_options = PipelineOptions(['--output', 'some/output_path'])
p = beam.Pipeline(options=pipeline_options)
wordcount_options = pipeline_options.view_as(WordcountOptions)
lines = p | 'read' >> ReadFromText(wordcount_options.input)
wordcount_options.input 是一个 RuntimeValueProvider。我希望在运行模板时使用指定的值,因此需要使用 wordcount_options.input.value。然而,在创建模板时它不具有属性“value”,只有“default_value”。 我尝试在创建模板时指定一个值(以便现在和以后都可以使用它),但无论我在运行时指定什么值,它都只使用我在创建模板时指定的先前值。(基本上,我的输入是一个 pickle 文件,所以不能直接使用 wordcount_options.input。)

你是如何将运行时的值传递给模板的?你能分享一下那段代码吗? - AnandShiva
1个回答

2

在链接的示例下面是一个部分在函数中使用ValueProvider

文档展示了在ValueProvider参数上使用.get()方法来检索运行时值。

请注意,由于它还没有从模板中注入,所以该值不能在管道构建期间使用。您应该只在运行时方法(例如DoFn.process())中调用ValueProvider.get()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接