0
我已經成功地使用Mongodb和MapReduce將超過5百萬行的銷售額彙總到60k左右。對結果非常滿意,但是對於結果中的一行感到困惑,因爲結果似乎將結果連接起來而不是總結結果,所以我結束了一個包含「0.00590100000000.00.0059010.133150000000.0053100.002960.043208000.00189」的值字段Mongodb - MapReduce連接值而不是求和
有沒有人遇到過這個?
通過仔細分析原始聲明中涉及的行,我看不到任何會導致它的內容,因爲它們看起來完全一樣。甚至有相同標識符的值已經被彙總。
我的代碼如下,任何人都可以發現任何可能導致它?就像我說的那樣,從520萬原始語句中只有7行,所以精確度相當不錯,它只是沒有發現,我知道它會讓我感到困擾。
mongoimport -d test -c sales --type csv --file sales_rawdata.csv --headerline
var mapFunction1 = function() {
emit({video_id: this.video_id, isrc: this.isrc, country: this.country}, this.amount_payable);
};
var reduceFunction1 = function(keyIsrc, valuesAmountPayable) {
return Array.sum(valuesAmountPayable);
};
db.sales.mapReduce(
mapFunction1,
reduceFunction1,
{ out: "sales_total_by_country_and_isrc" }
)
db.sales_total_by_country_and_isrc.find()
mongoexport --csv -d test -c sales_total_by_country_and_isrc -q '{value: {$ne: 0}}' -f "_id.video_id","_id.isrc","_id.country","value" -o sales_total_by_country_and_isrc.csv
謝謝!看起來這些行在原始數據導入時被存儲爲字符串。那麼我怎樣才能確保什麼時候導入,這些是整數的力量? – Raoot 2013-04-22 17:42:20
嗨瑞安 - 不幸的是,我不認爲有一個選項可以將字符串轉換爲與mongoimport數字。我能想到的唯一方法是在啓動map/reduce之前更新那些amount_payable是字符串的行,或者處理map-reduce中的不同類型,儘管在性能方面可能會很痛苦。 – Kay 2013-04-23 00:47:17
我會給你一個去。如果我可以首先識別字符串的值,然後轉換,我想它會相當快。再次感謝。 – Raoot 2013-04-23 09:29:03