在 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
}
}
我需要将参数从 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
}
}