Создание собственного процессора в Apache Nifi - PullRequest
0 голосов
/ 27 марта 2019

Я создаю собственный процессор для обработки файла потока, чтобы обработать файл потока, мне нужно прочитать файл CSV из моей локальной файловой системы.Я создал дескриптор свойства CSV_PATH следующим образом:

public static final PropertyDescriptor CSV_PATH = new 
PropertyDescriptor
.Builder().name("CSV Path")
.displayName("CSV Path")
.description("CSV Path Reader")
.required(true)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.build();



@Override

protected void init(final ProcessorInitializationContext context) {

final List<PropertyDescriptor> descriptors = new 
ArrayList<PropertyDescriptor>();

descriptors.add(JSON_PATH);

descriptors.add(CSV_PATH);

this.descriptors = Collections.unmodifiableList(descriptors);



final Set<Relationship> relationships = new HashSet<Relationship>();

relationships.add(SUCCESS);

this.relationships = Collections.unmodifiableSet(relationships);

}

Теперь я хочу получить значение свойства CSV_PATH, установленное в пользовательском интерфейсе, при настройке процессора.Я не могу получить значение CSV_PATH.Также, если я жестко закодировал путь к файлу в коде, я все равно не могу прочитать CSV из локальной файловой системы.

1 Ответ

2 голосов
/ 27 марта 2019

Вы хотите использовать следующий код, чтобы получить значение PropertyDescriptor из ProcessContext:

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
    FlowFile flowFile = session.get();
    if (flowFile == null) {
        return;
    }

    final String csvPath = context.getProperty(CSV_PATH).getValue();

    // Do something with csvPath

}

Если вы решилиподдержка Язык выражений NiFi в этом дескрипторе свойства, вы также должны оценить это:

final String csvPath = context.getProperty(CSV_PATH).evaluateAttributeExpressions().getValue();

Для этого есть дополнительные переопределения методов, включая атрибуты потокового файла, реестр переменных, пользовательские декораторы и т. д.

Это описано в Руководстве разработчика Apache NiFi .Недавно я провел презентацию на Dataworks Summit Barcelona 2019 , посвященную разработке нестандартных процессоров, с некоторыми рекомендациями и примерами, которые могут оказаться полезными.Вы также можете посмотреть на любой существующий процессор в базе кода NiFi, чтобы увидеть примеры.

...