regex - Pig - 使用正则表达式提取字符串

标签 regex apache-pig

我正在使用 pig 分析日志文件。

我的输入日志文件('/user/586376/Pig_C')看起来像这样。

12901890 \t rosies blog \t 2006-05-15 21:42:19 \t 1 \t http://www.rosie.com


A = load '/user/586376/Pig_C' as (ID:int, query:chararray, time:chararray, rank:int, url:chararray);

在这里,我想列出一天中以下时间经常访问的站点( 前 3 ):上午 10 点到上午 11 点

目前,我在时间字段上使用 STRSPLIT 来提取所需的小时数。
Timesplit = FOREACH A GENERATE url, STRSPLIT(time,' ') as time_split;

B = FOREACH Timesplit GENERATE url, FLATTEN(time_split) as (date,time1); 

C = FOREACH B GENERATE url, STRSPLIT(time1,':') as h;

final = FOREACH C GENERATE url,flatten(h) AS (hour,min,sec); 

拆分时间字段后,我使用 过滤器 , GROUP BY 计数 UDF 查找上午 10 点期间经常访问的前 3 个 url。和上午 11 点

输出:
(http://www.google.com,5)

(http://finance.yahoo.com,2)

(http://www.nada.com,2)

但是,我觉得必须有一种更简单的方法来使用 PIG UDF 作为 获取小时字段。 regex_extract regex_extract_all 而不是使用STRSPLIT。但是我无法编写正则表达式来从给定的时间戳中提取所需的小时数。

现在有什么想法可以编写正则表达式来查找给定时间戳的小时数吗?

编辑:

在 pig 中编写以下正则表达式以提取小时数:
data = FOREACH A GENERATE url, FLATTEN(EXTRACT(time,'\\d{4}-\\d{2}-\\d{2}\\s(\\d{2}):\\d{2}:\\d{2}')) AS (hour:chararray) ;

但得到以下错误,

错误:

2013-08-19 18:20:28,745 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1045: Could not infer the matching function for org.apache.pig.piggybank.evaluation.string.RegexExtract as multiple or none of them fit. Please use an explicit cast.



任何建议,我哪里出错了???

最佳答案

从评论来看,您似乎混淆了 REGEX_EXTRACT 的论点。和 REGEX_EXTRACT_ALL .由于您只需要提取一部分,请使用 REGEX_EXTRACT ,它不返回元组,但需要另一个指定索引的参数:

data =
    FOREACH A
    GENERATE
        url,
        REGEX_EXTRACT(time, '\\d{4}-\\d{2}-\\d{2}\\s(\\d{2}):\\d{2}:\\d{2}', 1)) AS(hour:chararray);

可能是 REGEX_EXTRACT 的第三个参数应该是 0 而不是 1,我不记得了。两个都试试。

关于regex - Pig - 使用正则表达式提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312090/

相关文章:

regex - sed 和 grep 中单词的开头和结尾

java - 如何获取组中嵌套括号的内容

php - [a-z] 会匹配 PREG/PCRE 中的重音字符吗?

regex - 使用正则表达式进行 ASP.NET Web API 2 模型验证

hadoop - 按当前日期过滤结果-在Hadoop PIG中为2天

hadoop - pig 中的资源模式和模式之间的区别

apache-pig - 将输出存储到单个 CSV?

javascript - 正则表达式:如何从标签内部获取内容(使用 javascript)?

regex - pig : extracting email details from raw text using REGEX

hadoop - PL/SQL 能否可靠地转换为 Pig Lating 或带有 Pig Latin 和 Hive 的 Oozie 管道