2016-10-22 41 views
0

我已經得到一個大的文本文件。用數據從公司的出租車。這個數據是組織在旅行之間。 例子:共享conf變量或使用兩個作業?哪個更好?

  1. 駕駛執照(32421ALED),票價(US $ 6)
  2. 駕駛執照(9167825HF),票價(US $ 15)

我Hadoop的地圖,減少計劃的目的是到返回收款金額最高的司機。

所以:

  • 映射有一個標記處理文本文件,這樣,對於每一個旅遊,它assosiates每個駕駛員對票價許可證。
  • 減速器需要映射器的輸出,然後通過添加所有的票價來獲得每個司機的收集的錢

現在是什麼?我需要另一個減速器,這樣一旦我得到每個司機的收款金額,我只需要就可以收到收款金額最高的那個。這就是問題。

我搜索過計算器,我發現兩種可能的解決方案

這將是我的問題的最佳選擇?還有嗎?

回答

0

其實你可以在一個程序中做到這一點。您可以在reducer中維護一個本地比較對象(驅動程序許可證,彙總收款金額),並在總和$加總之後將其與當前處理(鍵值)進行比較,如果它大於本地對象,則使用當前對象進行賦值。 這裏你不打算在reduce方法中使用context.write()。最後,您將在Reducer的清理方法中執行本地比較對象的context.write(),它將具有驅動程序許可證和$的最高集合。

注意:您只需要通過設置job.setNumReduceTasks(1);不確定這是否符合您的要求。

+0

感謝您的回答。唔,不會是一個選擇。 如果我使用分佈式緩存或Configuration.set()會怎麼樣? – Hernan

+0

你想寫這個MapReduce程序來查找收集的最大金額的驅動程序。我無法理解你如何在Configuration.set()中設置最大的數量?如果你已經知道,那麼編寫這個程序的目的是什麼?請你清楚一點 – Meeran0823