我有许多文件要进入 HDFS,命名约定是这样的:
我想使用下划线之间的段作为变量来制作 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句