Regex_Extract使用PIG

时间:2015-08-07 18:04:00

标签: regex hadoop count apache-pig

我正在使用PIG在一组记录中查找字符串,然后输出文件的名称(使用UDF附加到每条记录的末尾)和匹配字符串的计数。文件名如下所示2015-03-04.23_55_05.Abhi_Ram.Info.json。

下面是我的猪脚本:

REGISTER UDF;

input_data= LOAD 'input_dir' using classname();

record_match = FILTER input_data by $0 matches '$Search_string';

group_record = GROUP record_match ALL;

record_count = FOREACH record_match GENERATE REGEX_EXTRACT($0,'((\\d{4}-\\d{2}-\\d{2})\\.(\\d.*)\.(\\w.*)\\.(\\w.*)\\.(json))',1), COUNT(record_match);

dump record_count;

我想输出

  

2015-03-04.23_55_05.Abhi_Ram.Info.json,count($ Search_string)。

我在正则表达式中遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

我不知道你为什么要将regex应用于源头的第一个字段。你的第一个字段是否有文件名模式?因为,

$ 0 - >表示连续的第一条记录。

然后,如果您希望源文件名在输出记录中。简单的方法是

read = LOAD 'inp.data' USING PigStorage(',','-tagsource');

将您的源文件名附加到记录开始。

2015-03-04.23_55_05.Abhi_Ram.Info.json, count($Search_string)

根据您的问题,REGEX_EXTRACT将是:

read = load 'test.data' using PigStorage(',');
date = foreach read generate FLATTEN(REGEX_EXTRACT($0,'(\\d{4})-(\\d{2})-(\\d{2}).(\\d{2})_(\\d{2})_(\\d{2}).(\\w.*)_(\\w.*).(\\w.*).json',0)) as      (filename_dt:chararray);
dump date;