将 PIG 与 Hadoop 结合使用,如何通过正则表达式将部分文本与未知数量的组进行匹配?

发布于 2024-10-09 20:03:12 字数 514 浏览 12 评论 0原文

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

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

   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)

I'm using Amazon's elastic map reduce.

I have log files that look something like this

   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" ...

How can I write a pig expression to pick out all the numbers in the 'foo' expressions?

I prefer tuples that look something like this:

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

I've tried the following:

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

But this yields only the first match in each line:

(1)
(1)
(1)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖不如嘢 2024-10-16 20:03:12

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

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

另一种选择是编写 Pig UDF。

You could use STRSPLIT: http://pig.apache.org/docs/r0.8.0/piglatin_ref2.html#STRSPLIT

The regex to split on would be [^0-9]+ (i.e., not numbers)
This will effectively split on large portions of non-numbers, leaving only tokens of numerical digits.

Another option would be to write a Pig UDF.

可是我不能没有你 2024-10-16 20:03:12

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

REGEX_EXTRACT(input, 'foo=(.*)',2) AS input;

REGEX_EXTRACT function may help you to get your desired output

REGEX_EXTRACT(input, 'foo=(.*)',2) AS input;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文