猪:用空白分隔符解析行

时间:2012-08-13 14:52:41

标签: apache-pig

我正在使用Hadoop Pig(0.10.0)处理日志文件,日志行看起来像:

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

我想得到与空格分开的标记的关系,即:

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

使用statement:

加载该数据

records = LOAD 'myapp.log' using PigStorage(' ');

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

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

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

例如从:

开始

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

获得

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

我正在尝试使用TextLoader然后TOKENIZE的另一种方法,但我不确定这是最好的策略。 也许用户负载功能是更自然的选择...

此致

乔尔

1 个答案:

答案 0 :(得分:2)

您可以使用带有正则表达式的内置函数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)