2012-10-27 36 views
0

我陷入讓Java分配開始。任何幫助,將不勝感激。我有兩個文本文件:加載一個文本文件並刪除重複項並計數登錄

1)用戶數(2MB)

UserID Activity  TimeStamp 
asdf login  1279246015000 
asdf login  1280264668000 
aaa  login  1280265253000 
aaa  purchase 1279121883000 
abc  login 1279122061000 

2)用戶配置

UserID  Website 
asdf  aaa.com 
aaa  abc.com 
abc  aaa.com 

我需要輸出以下信息:

Number of logins  Total users aaa.com abc.com 
1     xxx     xxx 
2 
3 
4 
etc... 

的預期的輸出是這樣的:「登錄次數」是在日誌文件中執行的登錄次數,按活動分組。因此,第一行應顯示從aaa.com網站,abc.com網站等僅通過網站分離出的一次用戶總數。第二行顯示來自aaa.com,abc.com等的用戶總數,這些用戶已登錄兩次;等等。

userlog和userprofile文本文件需要進行重複數據刪除。

+3

預期的輸出顯示不清楚。您能解釋兩個文件 – Jayy

+0

的期望輸出是什麼:預期輸出如下: 「登錄次數」是按活動在日誌文件組中執行的登錄次數。因此,第一行應顯示從aaa.com網站,abc.com網站等僅登錄過一次的用戶總數。 第二行應顯示來自aaa.com,abc的用戶總數.com等...有登錄兩次等... – Sublimotion

+0

我們嘗試過使用「Set」嗎?應該根據需要「刪除」重複項,這意味着我們必須向Set提供正確的「比較」方法。 – Fred

回答

0

您可能需要使用Hadoop的(當然,這可能是矯枉過正 - 但它是值得了解)

特別是this example展示瞭如何在計算大文件的話。您需要調整縮小階段並在其中包含網站。

0

對於2Mb日誌文件,讀取文件和計數元素的簡單程序將在幾秒鐘內運行(可能會更少)。


使用時應使用地圖(java的詞典):

  • 爲的UserProfiles一個地圖:鍵=用戶ID,值=網站
  • 一個Map通過網站數 登錄,關鍵這個地圖是網站,value = count。

每次讀取一行日誌時,都會從userprofiles映射中獲取用戶標識的網站,並且您會在countLogins映射中遞增該網站的網站登錄計數。

相關問題