3

我正在使用亚马逊的弹性地图减少。

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

   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)
4

2 回答 2

0

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

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

另一种选择是编写 Pig UDF。

于 2010-12-30T14:49:10.120 回答
0

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

REGEX_EXTRACT(input, 'foo=(.*)',2) 作为输入;

于 2014-09-04T07:13:30.140 回答