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