升级到Beam 2.0之后,Pipeline
类不再具有getOptions()
类。
我有一个复合PTransform
,它依赖于获取其expand
方法中的选项:
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
。有什么选择?
最佳答案
Pablo's answer是正确的。我还想澄清一下,PipelineOptions
的管理方式发生了重大变化。
您可以使用它们来解析参数并将其传递给main
程序(或构建管道的任何代码),但是从技术上讲,它们与配置管道运行方式的PipelineOptions
独立。
在Beam中,Pipeline
是完全构建的,只有在之后,您才选择PipelineRunner
和PipelineOptions
来控制管道的运行方式。管道本身实际上没有选项。
如果您确实希望PTransform
的行为(而不是其扩展名)使用动态获取的某些选项,则应使PTransform
接受ValueProvider
like this example in WriteFiles
,然后可以定义返回以下内容的管道选项: ValueProvider
like here in ValueProviderTest