当前位置: 首页 > 知识库问答 >
问题:

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

翟永春
2023-03-14

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

}

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

共有1个答案

殷建弼
2023-03-14

您希望使用以下代码从ProcessContext检索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

}

如果您决定在属性描述符中支持NiFi表达式语言,则还需要对其进行评估:

最终字符串csvPath=context.getproperty(CSV_PATH).evaluateAttributeExpressions().getValue();

这在Apache NiFi开发人员指南中有说明。我最近在巴塞罗那2019年Dataworks峰会上做了一次演示,介绍了定制处理器开发,包括一些最佳实践和可能有用的示例。您还可以查看NiFi代码库中的任何现有处理器以查看示例。

 类似资料:
  • 我无法确定要为msgID和msgData使用什么属性,所以我现在创建了自己的属性。我看到一篇文章,有人建议构建您自己的json结构,并将其作为有效负载发送,但同样,您将通过哪个属性发送该结构,以便将其正确映射到kafka消息?我对Kafka很陌生,到目前为止,我只尝试了一些基本的测试案例,所以请原谅我的无知,因为我有任何错误的假设。 谢谢您的指导!我使用的是Kafka2.0.1和PublishKa

  • 问题内容: 有没有一种方法可以JButton用您自己的按钮图形而不是仅在按钮内部创建图像? 如果没有,是否还有另一种方法可以JButton在Java中创建自定义? 问题答案: 当我第一次学习Java时,我们不得不制造Yahtzee,我认为创建自定义的Swing组件和容器会很酷,而不仅仅是在一个组件上绘制所有内容JPanel。Swing当然,扩展组件的好处是能够添加对键盘快捷键和其他辅助功能的支持,

  • 有人能帮我创建balow图像剪切搜索栏吗?我已经用自定义拇指和分段文本浏览过SeekBar,还有SeekBar拇指位置问题 但是我没有成功创建我的客户搜索栏,请帮助我

  • 问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU

  • 问题内容: 我需要做的就是在当前函数执行结束时执行一个回调函数。 此功能的使用者应如下所示: 我该如何实施? 问题答案: 实际上,您的代码将按原样工作,只需将回调声明为参数即可,您可以使用参数名称直接调用它。 基础知识 那会叫,这会叫,这会提醒“东西在这里”。 请注意,传递函数 引用 ()而不是调用函数并传递其结果()非常重要。在您的问题中,您可以正确执行此操作,但是值得指出,因为这是一个常见错误

  • 我正在使用Spring Boot创建一个访问数据库的简单web应用程序。通过在中设置属性,我利用了DataSource的自动配置功能。这一切都很出色,而且非常快--伟大的工作伙计们@Spring! 我公司的政策是不应该有明文密码。因此,我需要对进行加密。经过一番深入研究,我决定创建一个实现,该实现创建一个jasypt,如下所示: 然后,我用文件将其打包到它自己的jar中,如下所示: 当在maven