将文件夹名称添加到输出

clj7thdc  于 2021-07-13  发布在  Hadoop
关注(0)|答案(1)|浏览(302)

hdfs中的下一个目录结构是:

logs_folder
   |---2021-03-01
          |---log1
          |---log2
          |---log3
       2021-03-02
          |---log1
          |---log2
       2021-03-03
          |---log1
          |---log2
...

日志由文本数据组成。数据中没有日期,因为它已在文件夹名称中。我要读取所有日志并按以下格式保存它们:

date    id

where id-日志中的字段,但我需要从文件夹名称中获取日期。预期产量:

2021-03-01    id1
2021-03-01    id2
...
2021-03-02    id234
2021-03-02    id456
...

如何将文件夹名称中的日期添加到输出中?
我发现了一个问题:如何在读取时向数据添加完整路径名:

A = LOAD '/logs_folder/*' using PigStorage(',','-tagPath'); 
DUMP A  ;

如何将当前输入文件名合并到pig拉丁语脚本中?
它非常接近,但是如何只获取父文件夹名而不是完整路径?

ymdaylpp

ymdaylpp1#

最后我用了这个方法:
使用“-tagpathz属性加载数据-它将列添加到加载的数据中,并包含每个文件的完整路径
仅使用regex筛选父文件夹
代码示例:

hadoop_data = LOAD '/logs_folder/*' USING PigStorage(',', '-tagPath') as (filepath:chararray, id:chararray, feature:chararray, value:chararray);
hadoop_data = FOREACH hadoop_data GENERATE id,(chararray)REGEX_EXTRACT(filepath,'.*\\/(.*)\\/',1) as path,
    feature,value;

我的数据由3个字段组成-id,feature,value,但是你可以看到其中有4个- filepath 字段已添加!

相关问题