升级到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是完全构建的,只有在之后,您才选择PipelineRunnerPipelineOptions来控制管道的运行方式。管道本身实际上没有选项。

如果您确实希望PTransform的行为(而不是其扩展名)使用动态获取的某些选项,则应使PTransform接受ValueProvider like this example in WriteFiles,然后可以定义返回以下内容的管道选项: ValueProvider like here in ValueProviderTest

10-07 20:38