添加文件夹名称以输出 Pig Latin

Posted

技术标签:

【中文标题】添加文件夹名称以输出 Pig Latin【英文标题】:Add folder name to output Pig Latin 【发布时间】:2021-03-30 15:23:13 【问题描述】:

我在 HDFS 中有下一个目录结构:

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

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

date    id

其中 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  ;

How can I incorporate the current input filename into my Pig Latin script?

非常接近,但是如何只获取父文件夹名称而不是完整路径?

【问题讨论】:

【参考方案1】:

最后我用了这个方法:

    使用 `-tagPathz 属性加载数据 - 它向加载的数据添加列,包含每个文件的完整路径 仅使用正则表达式过滤父文件夹

代码示例:

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 字段!

【讨论】:

以上是关于添加文件夹名称以输出 Pig Latin的主要内容,如果未能解决你的问题,请参考以下文章

用 Pig Latin 为每组编写一个文件

Store 命令中的 Pig Latin 参数

pig latin - 从单行输入创建多行输出

无法从 Pig Latin 的 Hadoop HDFS 加载文件

读取非定界 asciif 文件 Apache Pig Latin

把指定的字符串翻译成 pig latin。