在Apache Nifi中创建自定义处理器

时间:2019-03-27 16:46:01

标签: apache-nifi

我正在构建一个自定义处理器来处理流文件,要处理流文件,我需要从本地文件系统中读取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);

}

现在,我想获取在配置处理器时在UI中设置的CSV_PATH属性的值。我无法获取CSV_PATH值。另外,如果我用代码对文件路径进行硬编码,那么仍然无法从本地文件系统读取CSV。

1 个答案:

答案 0 :(得分:2)

您要使用以下代码从中检索PropertyDescriptor的值:

@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

}

如果您决定在该属性描述符中支持ProcessContext,则还需要对此进行评估:

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

对此有其他方法替代,包括流文件属性,变量注册表,自定义装饰器等。

这被记录在NiFi Expression Language中。我最近做了一个Apache NiFi Developer's Guide,涵盖了自定义处理器开发,其中包括一些最佳实践和可能有用的示例。您还可以查看NiFi代码库中任何现有的处理器,以查看示例。