升级到 Beam 2.0 后Pipeline
类没有getOptions()
不再上课了。
我有一个复合的PTransform
这依赖于获取其选项expand
method:
public class MyCompositeTransform extends PTransform<PBegin, PDone> {
@Override
public PDone expand(PBegin input) {
Pipeline pipeline = input.getPipeline();
MyPipelineOptions options = pipeline.getOptions().as(MyPipelineOptions.class);
...
}
}
在 Beam 2.0 中似乎没有办法访问PipelineOptions
完全在expand
method.
还有什么选择呢?
巴勃罗的回答 https://stackoverflow.com/a/45020492/4820657是正确的。我还想澄清一下,方式发生了重大变化PipelineOptions
被管理。
您可以使用它们来解析参数并将其传递给您的main
程序(或构建管道的任何代码),但这些在技术上独立于PipelineOptions
配置管道的运行方式。
在梁中,Pipeline
已完全构建完毕,然后您才可以选择PipelineRunner
and PipelineOptions
控制管道的运行方式。管道本身实际上没有选项。
如果你确实想要你的行为PTransform
(不是它的扩展)要使用动态获取的某些选项,您应该使您的PTransform
接受一个ValueProvider
就像这个例子WriteFiles https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/WriteFiles.java#L126您可以定义一个返回a的管道选项ValueProvider
就像这里ValueProviderTest https://github.com/apache/beam/blob/master/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java#L52
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)