hadoop - 尼菲 : capturing the middle section of a filename

标签 hadoop expression apache-nifi

我有很多文件要转到 HDFS,命名约定是这样的:

  • acme_beneficiary_20190820
  • acme_stats_20190820
  • acme_provision_20190820
  • acme_sponsor_20190820

我想使用下划线之间的段作为变量来制作 HDFS 路径,所以它看起来像这样:

/my/hdfs/directory/sponsor/2019/

我找到了一种分两步完成的方法,但我认为一定有一种方法可以一步完成。第一步,我有一个“更新属性”处理器,它创建一个具有以下值的变量“file_src”:

${filename:substringAfter('_')}

所以现在它看到文件名为“beneficiary_20190820”等。在此之后,我有另一个“更新属性”处理器,它有一个名为“dest”的变量,其值如下:

${file_src:substringBefore('_'):toLower()}

所以现在我的 hdfs 目录可以是这样的:

/my/hdfs/directory/${dest}/2019

它有效,但感觉笨拙。有没有办法一步到位?我觉得这些表达式可能是嵌套的。在此先感谢您的帮助。

最佳答案

把所有东西放在一个表达式中

${filename:substringAfter('_'):substringBefore('_'):toLower()}

您甚至可以在没有 UpdateAttribute 的情况下直接在 hdfs 目录表达式中使用此表达式:

/my/hdfs/directory/${filename:substringAfter('_'):substringBefore('_'):toLower()}/2019

关于hadoop - 尼菲 : capturing the middle section of a filename,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594032/

相关文章:

c# - LINQ to Entities 根据客户端输入对表达式进行排序

kerberos - NIFI - 如何连接到启用 Kerberos 的 KUDU

java - MapReduce ArrayList 类型不匹配

hadoop - HBase表数据转换为CSV

SSIS 派生列表达式

boolean - 评估 boolean 表达式值的算法

javascript - 尼菲 : code in executeScript processor doesn't work properly

apache-nifi - 如何用 POST 查询的特定值替换 InvokeHTTP?

hadoop - ubuntu上Hadoop-1.2.0单机集群的include文件在哪里找?

java - scala/spark —如何使用指定的任意字节数组创建字符串?