【问题标题】:Testing @Default value for Beam PipelineOptions ValueProvider测试 Beam PipelineOptions ValueProvider 的 @Default 值
【发布时间】:2020-07-23 09:54:56
【问题描述】:

我想要一个 Dataflow 模板,其中一个 PipelineOptions 参数具有默认值。

受在线示例的启发,我在我的 PipelineOptions“子”接口中使用 ValueProvider 占位符进行延迟参数设置:

  @Default.String("MyDefaultValue")
  ValueProvider<String> getMyValue();
  void setMyValue(ValueProvider<String> value);

如果我在运行时指定参数,则模板可用于启动真正的 GCP Dataflow 作业。但是,如果我在实际执行此操作之前尝试测试不包括参数:

@Rule
public TestPipeline pipeline = TestPipeline.create();
...
  
@Test
public void test() {
  PipelineOptions options = PipelineOptionsFactory.fromArgs(new String[] {...}).withValidation();
  ...
  pipeline.run(options);
}

然后,当我的 TestPipeline 执行需要参数的 DoFn processElement 方法时,我得到

IllegalStateException: Value only available at runtime, but accessed from a non-runtime context: 
RuntimeValueProvider{propertyName=myValue, default=MyDefaultValue}
...

更具体地说,它在 org.apache.beam.sdk.options.ValueProvider 中失败:

@Override
public T get() {
  PipelineOptions options = optionsMap.get(optionsId);
  if (options == null) {
    throw new IllegalStateException(...

人们可能会认为运行时是管道运行时。

无论如何,有人知道我将如何对默认参数进行单元测试,假设顶部代码 sn-p 应该如何设置并且受支持?谢谢。

【问题讨论】:

  • 根据文档“对于仅在运行时可用的 ValueProvider 对转换进行单元测试,请使用 TestPipeline.newProvider(T)。”使用 newProvider 能解决您的问题吗? beam.apache.org/releases/javadoc/2.11.0/index.html?org/apache/…
  • 我看到了,但这不是明确设置参数值吗? (我正在尝试测试它是否使用带注释的默认值。)
  • 查看代码,一旦 PipelineOptions 对象被反序列化 (source code),就可以访问 ValueProviders。你如何测试这个?您是否以不会反序列化 PipelineOptions 的方式运行它? (例如,在本地运行器上运行,或运行时不使用任何 PipelineOptions)
  • @nsandersen 我同意 Daniel 关于反序列化对象的观点。你能告诉我们更多吗?
  • 抱歉,我不得不做一些别的事情。添加了我用来运行管道测试的示例代码。

标签: google-cloud-dataflow default apache-beam options value-provider


【解决方案1】:

当我从 Eclipse 生成 Dataflow 模板时,我遇到了同样的问题,我的 Dataflow 模板从 Cloud Composer DAG 接收了一个参数。

我从 Google Cloud 文档中获得了解决方案: https://cloud.google.com/dataflow/docs/guides/templates/creating-templates#using-valueprovider-in-your-functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2014-09-30
    相关资源
    最近更新 更多