Amazon web services 在Hadoop中使用PIG时,如何将文本的某些部分与未知数量的组进行正则表达式匹配?

Amazon web services 在Hadoop中使用PIG时,如何将文本的某些部分与未知数量的组进行正则表达式匹配?,amazon-web-services,hadoop,mapreduce,apache-pig,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) 我尝试了以下方

我正在使用亚马逊的弹性地图还原

我有这样的日志文件

   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)

您可以使用STRSPLIT:

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


另一种选择是编写Pig UDF。

正则表达式提取函数可以帮助您获得所需的输出


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

是的,你说得对。不幸的是,我的例子有误导性,因为它没有说明我实际上有其他我不想匹配的数值表达式。我已经更新了我的示例,使其更具说明性。您能不能不使用Pig UDF来实现这一点?