2013-10-27 71 views
0
一天

我有一個特定的產品銷售數據的日誌如下的MapReduce分析在給定時間內的產品銷售爲

product  date    time Rs 
    red ballons 2012-10-02  0128 1000 
    blue socks 2012-10-02  0003 3498 
    current  2012-10-02  0120 0987 
    red ballons 2012-10-02  0056 1000 
    blue socks 2012-10-02  0059 6764 

可能有人請給我建議,如何在java mapreduce寫來計算 產品每小時銷售和每12小時的特定日期 我是mapreduce的新手。我需要了解 映射器應該如何選擇它的關鍵,並在一張地圖如何減少工作可以給雙方一個小時銷售和12小時銷售 任何幫助將我的思想的分析進一步感謝

回答

0

有你的映射器確定一個或更多時間分量(日期和小時,日期和12小時等),併爲其提供唯一標識符。使用唯一標識符作爲您的密鑰,並將每個產品的銷售額作爲您使用映射器編寫時的值。

您的減價者將獲得您每個期間的所有銷售額。所有你需要做的就是對所有金額運行一筆款項。

假設您想要執行多個時間段,請花費1小時和12小時。我會創建一個stripHours函數,比如這個。

public static Date stripHours(Date date, int hours) { 
    long offsetMillis = date.getTimezoneOffset() * 60000l; 
    long timePeriod = hours * 3600000l; 
    return new Date(((date.getTime() - offsetMillis)/timePeriod) * timePeriod + offsetMillis); 
} 

對於每一行輸入到您的映射器,用寫鍵= stripHours一排(日期,1),並用鍵= stripHours(日期,12)另一行。在這兩種情況下,都要將產品的銷售額作爲價值。

當然,您需要一些方法來區分1小時鍵和12小時鍵。一個非常簡單的方法是使用某種字符串連接,如「12」+ strippedDate.getTime()和「1」+ strippedDate.getTime(),但我相信你可以弄清細節。

+0

謝謝。所以如果我選擇產品和日期(不是時間)作爲一個關鍵,那麼減速機可以在整個銷售過程中總計一個日期,在這種情況下,減速機可以爲小時和12小時都寫輸出。我們是否需要寫兩個mapreduce,我的意思是一小時計算,一個計算12小時銷售。如果這是真的,那麼在這種情況下,每小時計算一次上午1點到下午2點,然後下午2點到3點,我們需要編寫兩個mapreduce作業,使用這種方法,我需要編寫24個mapreduce作業。我認爲這是不正確的方式。 –

+0

我會在上面進行編輯並進行詳細說明,但是您絕對可以在一份工作中完成。 – pscuderi

+0

非常感謝。我會努力工作並更新你。歡呼 –