Iam使用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點
目前,Iam在時間字段上使用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);
分裂時間字段後,蔭使用FILTER,GROUP BY和COUNT 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小時字段更簡單的方法。但Iam無法編寫正則表達式從給定的時間戳中提取所需的小時數。
任何想法現在寫正則表達式來查找給定時間戳的小時?
編輯:
寫了下面的正則表達式豬提取時間:
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.
任何建議,哪裏出錯?
所以你想要一個正則表達式與你的日誌文件中的'2006-05-15 21:42:19'和類似的時間戳相匹配,並且明確地從中提取小時? –