将文件夹名称添加到输出

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

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

  1. logs_folder
  2. |---2021-03-01
  3. |---log1
  4. |---log2
  5. |---log3
  6. 2021-03-02
  7. |---log1
  8. |---log2
  9. 2021-03-03
  10. |---log1
  11. |---log2
  12. ...

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

  1. date id

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

  1. 2021-03-01 id1
  2. 2021-03-01 id2
  3. ...
  4. 2021-03-02 id234
  5. 2021-03-02 id456
  6. ...

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

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

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

ymdaylpp

ymdaylpp1#

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

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

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

相关问题