2012-07-13 66 views
0

我有一個搜索日誌與時間,地點和查詢字段。我想從特定時間之間的某個特定地點找到查詢最多的單詞。所有的字段,即日期,時間,query_String是chararrays。我有下面的豬腳本,但它沒有做什麼要求。大多數出現在特定時間之間的搜索

Data = LOAD 'data' USING CustomPigStorage(); 
FClients = FILTER Data BY NOT(country is null); 
Clients = FOREACH FClients GENERATE date,time, country,query_string as query; 
grp = group Clients by (query, country, date, time); 
wth_count = foreach grp generate FLATTEN(group), COUNT(Clients) as count; 

例如,我希望結果是「下午2點到3點之間,你好從美國搜索了4次」。 我基本上被Count()函數弄糊塗了。對豬來說是相對較新的。我相信我的計數()在計數我擁有的記錄總數。

回答

0

您的查詢看起來正確,COUNT(客戶端)返回包中來自客戶端並屬於該組的記錄數。要查看它,您可以從「wth_count」語句中刪除COUNT並將結果保存到文件中,然後再查看它。

wth_count = foreach grp generate group, Clients; 
store wth_count into 'path'; 

您的潛在問題可能在於您在組中使用日期和時間列,並且它們產生的組過多。爲了緩解這個問題,你可以編寫一個java靜態函數來獲取日期和時間,並返回該範圍的單個值,例如12-07-2012,14.05.03被轉換爲「12-07-2012 14h」和12-07 -2012,14.05.05到「12-07-2012 14h」。這將創建一個覆蓋時間間隔2pm和3pm的密鑰,並將所有來自Clinets的記錄放入該組的包中。

+0

我想根據查詢分組客戶端,稍後想分組查詢的計數。這是每個查詢分組的次數。 – RFT 2012-07-16 15:45:03

+0

你能提供一個樣本輸入和期望的輸出嗎? – alexeipab 2012-07-17 05:47:45

+0

輸入:日期,時間,國家,查詢 輸出:查詢,國家,日期,(時間1,時間2 ..時間n),(日期出現的次數) 基本上一天查詢所有時間出現並計算查詢出現在特定日期的次數 2012/3/1,16:04:01,美國,西部4日 2012/3/1,16:04:02,美國,西部第4 輸出應如下所示: west 4 st,US,2012/3/1,(16:04:01,18:04:02),2 – RFT 2012-07-17 17:35:15

相關問題