将PIG与Hadoop一起使用,如何将正则表达式与未知数量的组匹配?

时间:2010-12-30 04:50:36

标签: amazon-web-services hadoop mapreduce apache-pig

我正在使用亚马逊的弹性地图缩小。

我的日志文件看起来像这样

   random text foo="1" more random text foo="2"
   more text notamatch="5" noise foo="1"
   blah blah blah foo="1" blah blah foo="3" blah blah foo="4" ...

如何编写一个pig表达式来挑选'foo'表达式中的所有数字?

我更喜欢看起来像这样的元组:

(1,2)
(1)
(1,3,4)

我尝试了以下内容:

TUPLES = foreach LINES generate FLATTEN(EXTRACT(line,'foo="([0-9]+)"'));

但这只会产生每一行的第一场比赛:

(1)
(1)
(1)

2 个答案:

答案 0 :(得分:0)

您可以使用STRSPLIThttp://pig.apache.org/docs/r0.8.0/piglatin_ref2.html#STRSPLIT

要拆分的正则表达式是[^0-9]+(即不是数字) 这将有效地分割大部分非数字,只留下数字的标记。

另一种选择是编写Pig UDF。

答案 1 :(得分:0)

REGEX_EXTRACT函数可以帮助您获得所需的输出

REGEX_EXTRACT(输入,'foo =(。*)',2)AS输入;