0

我目前正在使用 UDF 来获取输出,但是正则表达式会做同样的事情并且可能更快!

我在 pig 中运行代码时遇到问题,这是我要运行的代码行。

data = FOREACH f GENERATE FLATTEN(REGEX EXTRACT(col4,'(?:\.)([^\.]*\.?[^\.]*)$')) AS (url:chararray) ;

这行代码出现错误语法错误,'(' 或附近的意外符号

正则表达式通过获取 google.co.uk 来工作,并将返回 .co.uk,google.com 将返回 .com 链接:http://gskinner.com/RegExr/? 372tm

然后我的想法是按 tld 的数量来计算。例如 3 co.uk

 countURL = group data by url;
 result = foreach countURL generate group, COUNT($1);

如果有人可以提供帮助,那就太好了。

谢谢

4

1 回答 1

1

有几件事:

  • 你错过_regex_extract
  • 您需要指定组0
  • 点需要双引号\\

data = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT(url,'(?:\\.)([^\\.]*\\.?[^\\.]*)$', 0));

这给出.comgoogle.com

于 2013-11-06T15:05:04.853 回答