我有很多文件要转到 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/