MapReduce物件重用問題

2021-10-04 22:43:07 字數 743 閱讀 4996

mapreduce

計算,輸出時key的值都是乙個,而且都是最後乙個put進入的值!

原因:key-value物件的重用導致的:key是乙個引用,它在棧中,指向堆中乙個物件,同樣value也是如此。雖然reduce方法會反覆執行多次,但key和value相關的物件只有兩個,key和value的引用也是只有兩個,reduce會反覆重用這兩個物件。所以put進去的key指向的物件只有乙個,物件的值為最後乙個put進去的值,所以輸出的key的值都為最後乙個。

解決:如果要儲存key或者value的結果,只能將其中的值取出另存或者重新clone乙個物件(例如text text= new text(value) 或者 string a = value.tostring()),而不能直接賦引用。因為引用從始至終都是指向同乙個物件,如果直接儲存它們,那最後它們都指向最後乙個輸入記錄。會影響最終計算結果而出錯。

案例:

輸出:

修改後的**:

輸出:

關於mapreduce中類重用機制

今天寫了乙個writable,其 如下 public class cfwritable implements writable public cfwritable int mark,listitems override public void write dataoutput out throws ...

UITableViewCell重用問題

在寫sina 微博介面的過程中使用到了cell,那麼就是在cell上新增一些控制項,但是由於每條微博的內容都是不同的,所以在顯示的過程中,出現了內容重疊的問題,其實就是uitableviewcell重用機制的問題。cpp view plain copy uitableviewcell tablevi...

webApp 重用問題

引用 context param param name param name param value param value context param 最好報紙每個專案的引數值不同,以免引起專案衝突 進行配置,這裡主要是讓log能將日誌寫到對應專案根目錄下,如我配置這兩個專案的 為xml cont...