2013-12-09 3 views
0

У меня есть журналы с этой строки:анализ журнала с Apache Pig

in24.inetnebr.com - - [01/Aug/1995:00:00:01 -0400] "GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt HTTP/1.0" 200 1839 

, где первый столбец (in24.inetnebr.com) является хост, второй (01/Aug/1995:00:00:01 -0400) является метка времени, то третий (GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt HTTP/1.0) является скачано стр.

Как найти последние две загруженные страницы для всех хостов с помощью Pig?

Большое вам спасибо за помощь!

+0

Я получил небольшой прогресс, теперь у меня есть строки с (отлиты, дата дата): (хост, дата, адрес) Из этого , как я могу выбрать два последних адреса для каждого хоста? Спасибо заранее. – alfayadd

ответ

0

Я решил эту проблему, FYI:

REGISTER piggybank.jar 
DEFINE SUBSTRING org.apache.pig.piggybank.evaluation.string.SUBSTRING(); 

raw = LOAD 'nasa' USING org.apache.hcatalog.pig.HCatLoader(); --cast the data, to make possible the usage of string functions 

rawCasted = FOREACH raw GENERATE (chararray)host as host, (chararray)xdate as xdate,(chararray)address as address; --cut out the date, and put together the used columns 

rawParsed = FOREACH rawCasted GENERATE host, SUBSTRING(xdate,1,20) as xdate, address; --make sure that the not full columns are omitted 

rawFiltered = FILTER rawParsed BY xdate IS NOT NULL; --cast the timestamp to timestamp format 

analysisTable = FOREACH rawFiltered GENERATE host, ToDate(xdate, 'dd/MMM/yyyy:HH:mm:ss') as xdate, address; 

aTgrouped = GROUP analysisTable BY host; 

resultsB = FOREACH aTgrouped { 
elems=ORDER analysisTable BY xdate DESC; 
two=LIMIT elems 2; --Choose the last two page 

fstB=ORDER two BY xdate DESC; 
fst=LIMIT fstB 1; --Choose the last page 

sndB=ORDER two BY xdate ASC; 
snd=LIMIT sndB 1; --Choose the previous page 

GENERATE FLATTEN(group), fst.address, snd.address; --Put together the pages 
}; 
DUMP resultsB; 
+0

Я сделал 4 анализа (два с Pig и два с Hive) в этом наборе данных NASA, я могу предоставить ссылку на набор данных и код для другого 3 анализа, если кому-то это интересно. – alfayadd