apache-pig - pig : parsing line with blank delimiter

标签 apache-pig

我正在使用 Hadoop Pig (0.10.0) 来处理日志文件,日志行如下所示:

2012-08-01  INFO   (User:irim)   getListedStocksByMarkets completed in 7041 ms

我想获得与由空格分隔的标记的关系,即:

(2012-08-01,INFO,(用户:irim),getListedStocksByMarkets,完成,in,7041,ms)

使用语句加载该数据:

records = 使用 PigStorage(' ') 加载 'myapp.log';

没有实现这一点,因为我的 token 可能被几个空格分隔,导致几个空 token 。 PigStorage 似乎不支持正则表达式分隔符(或者至少我没有成功地以这种方式配置它)。

所以我的问题是:获得这些代币的最佳方式是什么?

如果我可以从关系中删除空元素,我会很高兴,可以用 Pig 做到这一点吗?

例如从以下位置开始:

(2012-08-01,,,INFO,,,(用户:irim),,getListedStocksByMarkets,完成,in,7041,ms)

获取

(2012-08-01,INFO,(用户:irim),getListedStocksByMarkets,完成,in,7041,ms)

我正在尝试使用 TextLoaderTOKENIZE 的另一种方法,但我不确定这是最好的策略。 也许用户加载函数是一个更自然的选择......

问候,

乔尔

最佳答案

您可以使用内置函数 STRSPLIT 和正则表达式将一行分成一个元组。这是针对您的特定示例的脚本,以逗号作为分隔符:

inpt = load '~/data/regex.txt' as (line : chararray);
dump inpt;
-- 2012-08-01,,,INFO,,,(User:irim),,getListedStocksByMarkets,completed,in,7041,ms

splt = foreach inpt generate flatten(STRSPLIT(line, ',+'));
dump splt;
-- (2012-08-01,INFO,(User:irim),getListedStocksByMarkets,completed,in,7041,ms)

关于apache-pig - pig : parsing line with blank delimiter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11936826/

相关文章:

hadoop - 运行Pig时出现错误:无法找到pig-core-h2.jar。做 'ant -Dhadoopversion=23 jar',然后再试一次

python - 如何从Apache Pig的part-r-0000获取输出

json - 如何使用PIG加载自定义记录(普通数据和Json数据的混合)

hadoop - PIG如何计算别名中的行数

java - Apache Pig过滤元组中的空值或文字

apache-pig - 如何在 PIG 中过滤具有空值的记录?

hadoop - pig - 计算整个组的成员

hadoop - pig CPU 密集型任务 - 小数据文件 - 许多映射器?

python - Apache Pig - 如何维护分布式查找表供我的 python UDF 访问?

hadoop - 如何从表中获取开始和结束事件