添加文件夹名称以输出 Pig Latin
Add folder name to output Pig Latin
我在 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?
非常接近,但是如何只获取父文件夹名称而不是完整路径?
最后我使用了这个方法:
- 使用 `-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
字段已添加!
我在 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?
非常接近,但是如何只获取父文件夹名称而不是完整路径?
最后我使用了这个方法:
- 使用 `-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
字段已添加!