在 Apache Beam 中将参数放入 DoFn 的 onElement 方法的最佳方法

Best way to get a param into DoFn's onElement method in Apache Beam

我需要将参数从 Main 传递到我的 DoFn 方法以供 onElement 方法使用。下面是代码中的示例。

public class MyPTransformClass<T> extends PTransform<PCollection<elemCLass>, PDone> {

@Override
public PDone expand(PCollection<elemClass> input) {
    input.apply(ParDo.of(new Fn<>()));
    return PDone.in(input.getPipeline());
}

private static class Fn<T> extends DoFn<elemClass, String> {

    private Fn() {
    }

    @Setup
    public void onSetup() {
      
    }

    @ProcessElement
    public void onElement(final ProcessContext context) {
        //Do some transformation using a PARAMETER passed from outside
    }
}

}

我想知道如何在不使用 side_input 的情况下将上面的参数传递给我的 DoFn。这不是动态的,将在整个执行过程中保持不变。

我尝试将它传递给 MyPTransform,然后从 DoFn 中访问它,但它在 DoFn 中总是以 Null 结束。

欢迎任何建议。

谢谢

使用在构造函数中传递给 DoFn 的 属性。

如果这是管道选项中可用的参数,那么您可以在 PTransform 的扩展中读取该值。

private static class Fn extends DoFn<elemClass, String> {

int something;

    public Fn(int something) {
    this.something = something
    }

    @Setup
    public void onSetup() {
      
    }

    @ProcessElement
    public void onElement(final ProcessContext context) {
        //Do some transformation using a PARAMETER passed from outside
        use something
    }
}