#apache-beam
#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
}
}
}
Мне было интересно, как я могу передать указанный выше ПАРАМЕТР в свой DoFn без использования side_input. Это не является динамическим и будет оставаться неизменным на протяжении всего выполнения.
Я попытался передать его в MyPTransform, а затем получить к нему доступ из DoFn, но в DoFn он всегда оказывается нулевым.
Любое предложение приветствуется.
Спасибо
Ответ №1:
Используйте свойство, которое передается 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
}
}