私は非常に単純なマップリデューステストを持っています...それは一貫して機能していません。一言で言えば、私は重複したレコードを探しています。私は次のようなコレクションを持っています:
GiftIdea-site_id-site_key
site_id + site_keyは一意である必要がありますが、現在は一意ではありません。だから私は次のマップリデュースコードを持っています:
var map = function() {
print(this.site_key);
emit(this.site_id + this.site_key, 1);
};
var reduce = function(key,values) {
var sum=0;
for(var i in values){
print(key + ": " + ++sum);
}
return sum;
};
この入力データを使用して:
GiftIdea
-site_id:amazon -site_key:2 -site_id:amazon -site_key:2
-site_id:amazon -site_key:1
だから私は得る必要があります:
amazon1 => 2 amazon2 => 1
これを実行するとどうなりますか
> o = db.gift_ideas.mapReduce(map,reduce)
{
"result" : "tmp.mr.mapreduce_1283015268_136",
"timeMillis" : 5,
"counts" : {
"input" : 3,
"emit" : 3,
"output" : 2
},
"ok" : 1,
}
わかりました。すばらしいニュースです。3行を出力し、2行を出力しました。
amazon1 => 1.00000 amazon2 => 1.00000
私のログファイルには、次のものがあります。
8月28日土曜日13:22:50[conn582]CMD:personalizr_test.tmp.mr.mapreduce_1283016170_139をドロップ8月28日土曜日13:22:50 [conn582] CMD:personalizr_test.tmp.mr.mapreduce_1283016170_139_incをドロップ
キー:amazon1値:2 Sat Aug 28 13:22:50 [conn582] personalizr_test.tmp.mr.mapreduce_1283016170_139_inc Sat Aug 28 13:22:50 [conn582] Buildindexpersonalizr_test.tmpの{0:1}に新しいインデックスを作成します。 mr.mapreduce_1283016170_139_inc idxNo:0 {ns: "personalizr_test.tmp.mr.mapreduce_1283016170_139_inc"、キー:{0:1}、名前:"0_1"}土8月28日13:22:50[conn582]2レコード0秒土8月28日13:22:50[conn582]personalizr_test.tmp.mr.mapreduce_1283016170_139の{_id:1}に新しいインデックスを作成8月28日土曜日13:22:50 [conn582] Buildindex personalizr_test.tmp.mr.mapreduce_1283016170_139 idxNo:0 {名前: " id"、ns:" personalizr_test.tmp.mr.mapreduce_1283016170_139 "、key:{_id:1}} Sat Aug 28 13:22:50 [conn582] done for 0 records 0secs Key:amazon1 Values:1 Key:amazon2 Values:1 8月28日土曜日13:22:50[conn582]CMD:personalizr_test.tmp.mr.mapreduce_1283016170_139_incを削除8月28日土曜日13:22:50 [conn582] CMD:personalizr_testを削除。 [conn582]接続終了127.0.0.1:56135
1、2、1は、マップ機能が正しく機能していることを示します。これは正しい順序の正しい項目ですが、reduce関数は奇妙に見えます。amazon1のreduceを2回呼び出していますが、2回目は値が正しくありません。もう1つは、最初の呼び出しの後、mongoがインデックスを作成しているように見えることです。最初のデータを待って、データ形式がどうなるかを把握し、インデックスを適切に生成できるようになると思います。しかし、なぜ電話がかかってきたのかわかりません:キー:amazon1値:1電話
助言がありますか?
その他の興味深い情報:mongo 1.6.1 mongoid 2.0.0.beta16 bson 1.0.4 bson_ext 1.0.4
本当に独特なことの1つは、ttが実際のデータを含む別のデータベースで動作することです。
入力されたデータベースのレコードの1つは次のようになります。
{ "_id" : ObjectId("4c69b7164914e54d9b007c34"), "avg_score" : null, "category_ids" : [ ], "created_at" : "Thu Aug 19 2010 05:57:25 GMT-0400 (EDT)", "desc" : null, "enabled" : null, "idea_ratings" : [ ], "images" : [
{
"url" : "http://ecx.images-amazon.com/images/I/515cLXdLUNL._SL75_.jpg",
"_id" : ObjectId("4c69b7164914e54d9b007c35"),
"height" : 61,
"width" : 75
}
], "num_ratings" : null, "owner_id" : null, "price" : -1, "rating_stats" : { "_id" : ObjectId("4c7746877719ad0712000dc8"), "total" : -1, "count" : 1, "average" : -1, "sum_of_weights" : 1 }, "ratings" : null, "response_groups" : [ ], "sales_rank" : 40751, "site_id" : "amazon", "site_key" : "B00001OPJE", "title" : "SNK NEOGEO Pocket Color Console in Platinum Silver", "updated_at" : "Fri Aug 27 2010 21:34:40 GMT-0400 (EDT)", "url" : "http://www.amazon.com/NEOGEO-Pocket-Color-Console-Platinum-Silver/dp/B00001OPJE?SubscriptionId=1VHSF1NEXNWHR2A8BA82&tag=gifter-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B00001OPJE" }
そして、これが私のサンプルの1つです
{ "_id" : ObjectId("4c7948667719ad410f000005"), "created_at" : "Sat Aug 28 2010 13:33:26 GMT-0400 (EDT)", "enabled" : true, "rating_stats" : { "_id" : ObjectId("4c7948667719ad410f00000d"), "total" : 2, "count" : 2, "average" : 1, "sum_of_weights" : 2 }, "sales_rank" : 10, "site_id" : "amazon", "site_key" : "1", "title" : "title1", "updated_at" : "Sat Aug 28 2010 13:33:26 GMT-0400 (EDT)", "url" : "url1" }
提案?