MongoDB MapReduce 實戰<5>

來源:互聯網
上載者:User
開始真正的實戰了,表資料約100w條,今天先解決第一個需求,也就是求平均記錄產生的時間,直接運行《實戰 2》已經編寫的MapReduce。 出現異常, 無結果,只要加入{sort},就無結果,尋找資料,說必須要建立索引才可加入sort(但是之前資料量小的時候,程式運行良好),建立索引後,在sort處,輸入{'CREATE_DATE':-1},出現結果,問題解決 結果中,許多記錄的TIMES欄位中的日期並沒有排序,且呈不規則,比如這次運行完MapReduce是這條記錄的Times排序有問題,但是再次運行MapReduce後,這條記錄的Times排序又沒有問題, 懷疑與多線程有關。只能在Finalize中對結果重新進行排序操作 增加Finalize,對日期進行排序
function Finalize(key, reduced) {if(reduced.times){  reduced.times.sort(function(x, y){return x < y ? 1 : -1;});    }  return reduced;}
In & Out 也作出相應的修改,去掉沒用的排序操作了
好,繼續運行第二個求平均值的MapReduce(《實戰3》中),繼續報異常 NaN,非數字異常,導致這個問題的原因很簡單,但是卻花了我不少時間,原因為超過了資料類型的最大範圍,需要修改MapReduce,不做整體累加後除整個次數,改為兩個數一加後,直接就求平均值 修改Map
function Map() {var temp = 0.0;var times = this.value.times;if(times){if(times.length > 1){for(var i = 0;i < times.length;i++){if(i != times.length - 1){temp += times[i] - times[i+1];temp = temp / 2}}}emit('Result', temp); }}
修改Reduce
function Reduce(key, values) {var ret = {msg:key};var temp = 0.0;for(var i = 0;i < values.length;i++){if(i > 0){temp += values[i];temp = temp / 2}}ret.arv_time = temp;return ret;}
由於出現了雙精確度,所以Finalize也需要稍微修改
function Finalize(key, reduced) {// 轉成秒 var second = parseInt(reduced.arv_time / 1000.00);    // 轉分鐘var minute = parseInt(second / 60);// 剩餘秒var s = second % 60;// 轉小時var hour = parseInt(minute / 60);// 剩餘分var m = minute % 60;// 轉天var day = parseInt(hour / 24);// 剩餘小時var h = hour % 24;    return day + " 天 " + h + " 小時 " + m + " 分鐘 " + s + " 秒 ";}
最終結果
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.