我正在使用PIG在一组记录中查找字符串,然后输出文件名(使用UDF追加到每条记录的末尾)和匹配字符串的计数。文件名如下所示2015-03-04.23_55_05.Abhi_Ram.Info.json。
以下是我的 pig 脚本:
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->表示连续的第一条记录。
然后,如果要将源文件名包含在输出记录中,简单的方法是
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;
关于regex - Regex_Extract使用PIG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31884044/