我正在使用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)。
我在正则表达式中遗漏了什么吗?
答案 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;