Apache pig Pig:使用空分隔符分析行

Apache pig Pig:使用空分隔符分析行,apache-pig,Apache Pig,我正在使用Hadoop Pig(0.10.0)处理日志文件,日志行如下所示: 2012-08-01 INFO (User:irim) getListedStocksByMarkets completed in 7041 ms 我想得到一个用空格分割的代币的关系,即: (2012-08-01,信息,(用户:irim),getListedStocksByMarkets,已完成,in,7041,ms) 用语句加载该数据: records=使用PigStorage(“”)加载“myapp.l

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

2012-08-01  INFO   (User:irim)   getListedStocksByMarkets completed in 7041 ms
我想得到一个用空格分割的代币的关系,即:

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

用语句加载该数据:

records=使用PigStorage(“”)加载“myapp.log”

因为我的代币可以被几个空格隔开,从而导致几个空代币,所以我没有做到这一点。 PigStorage似乎不支持regexp分隔符(或者至少我没有成功地以这种方式配置它)

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

如果我能从一段关系中删除空的元素,我会很高兴的,有可能用猪来做吗

例如,从:

(2012-08-01,,,信息,,,(用户:irim),,getListedStocksByMarkets,已完成,于,7041,ms

得到

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

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

问候,


Joel

您可以使用内置函数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)

很有效,谢谢!我倾向于认为用户加载功能会更有效,你同意吗?是的,会的。好处是:数据格式与pig脚本分离,与AS(列……)集成。