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来实现这一点?