#apache-nifi
#apache-nifi
Вопрос:
Я создаю пользовательский процессор для обработки файла flow, для обработки файла flow мне нужно прочитать файл CSV из моей локальной файловой системы. Я создал дескриптор proerty 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:
Вы хотите использовать следующий код для извлечения значения 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();
Для этого существуют дополнительные переопределения методов, включая атрибуты flowfile, реестр переменных, пользовательские декораторы и т.д.
Это задокументировано в Руководстве разработчика Apache NiFi. Недавно я сделал презентацию на Dataworks Summit Barcelona 2019, посвященную разработке пользовательских процессоров, включив в нее некоторые лучшие практики и примеры, которые могут оказаться полезными. Вы также можете посмотреть на любой существующий процессор в кодовой базе NiFi, чтобы увидеть примеры.