У меня странная ситуация с уменьшением карты. Результат не рассматривает все записи, хотя и должен.Mongodb mapreduce недостающие документы
У меня есть коллекция твитов, как показано ниже. У меня 230 документов - мой запрос на созданном году. вот пример
{
"_id" : ObjectId("56e55b52330dfb156547d559"),
"message" : "RT @TwitFAKTA: Kiper MU, David De Gea mempunyai ritual unik sebelum bertanding, yaitu memutar lagu-lagu Metallica dengan keras.",
"createdyear" : "2016",
"handle" : "xxx",
"createdtime" : "13:23:33",
"searchtopic" : "Metallica",
"createdmonth" : "03",
"createddate" : "2016-03-13",
"user" : "xxx"
}
Моя картографическая функция подобна этому. Очень просто: конечным результатом будет количество твитов на тему и месяц.
function(){
emit({topic: this.searchtopic, month: this.createdmonth},1)
};
и здесь функция уменьшения: Я просто подсчитываю количество значений для данного ключа.
function(key,value) {
var counter=0;
for (var i=0;i<value.length;i++) {
counter = counter +1;
}
return counter;
};
, а затем я создаю mapreduce и сохраняю вывод в коллекции.
db.tweets.mapReduce(map,reduce,{out: "mapreduce_test"})
результат заключается в следующем:
{
"result" : "mapreduce_test",
"timeMillis" : 6,
"counts" : {
"input" : 230,
"emit" : 230,
"reduce" : 4,
"output" : 2
},
"ok" : 1
}
карта сократить работы, но результаты не являются правильными. когда я перечисляю выход из MapReduce я получаю следующее:
{ "_id" : { "topic" : "3 Doors Down", "month" : "03" }, "value" : 2 }
{ "_id" : { "topic" : "Metallica", "month" : "03" }, "value" : 31 }
Когда я вручную искать документы, я получаю 228 для Metallica и 2 для 3 Doors Down. Это 230 входов и испускаемых записей.
Так где же другие документы? Что случилось?
Обычно у меня есть процесс, который получает твиты из Twitter и хранит их в mongodb. Таким образом, коллекция всегда становится все больше. Когда я регулярно запускаю задачу mapreduce через cron, я заметил, что она работает некоторое время, а затем внезапно появляются неправильные результаты. Посмотрите:
Sun Mar 13 14:30:02 CET 2016
running mapreduce for topic: Metallica
{"name": "Metallica","data":[0, 0, 47.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
running mapreduce for topic: 3 Doors Down
{"name": "3 Doors Down","data":[0, 0, 2.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
writing output file: /home/uwe/development/highcharts/highcharts_tweets.html
Sun Mar 13 14:40:02 CET 2016
running mapreduce for topic: Metallica
{"name": "Metallica","data":[0, 0, 67.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
running mapreduce for topic: 3 Doors Down
{"name": "3 Doors Down","data":[0, 0, 2.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
writing output file: /home/uwe/development/highcharts/highcharts_tweets.html
Sun Mar 13 14:50:02 CET 2016
running mapreduce for topic: Metallica
{"name": "Metallica","data":[0, 0, 87.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
running mapreduce for topic: 3 Doors Down
{"name": "3 Doors Down","data":[0, 0, 2.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
writing output file: /home/uwe/development/highcharts/highcharts_tweets.html
Sun Mar 13 15:00:02 CET 2016
running mapreduce for topic: Metallica
{"name": "Metallica","data":[0, 0, 7.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
running mapreduce for topic: 3 Doors Down
{"name": "3 Doors Down","data":[0, 0, 2.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
writing output file: /home/uwe/development/highcharts/highcharts_tweets.html
Количество документов растет, а затем внезапно в 15:00 оно упало. Хотя у меня все еще есть документы в базе данных, я несколько раз проверял их.
Я также запускаю это на второй машине, но с теми же результатами.
У кого-нибудь есть объяснение этого поведения?
Спасибо,
Uwe
Thank you Joachim. Хм.Я должен думать об этом. Я предполагал, что я всегда получаю 1 перетаскиваемый из значения [i]. Но, вероятно, это неправильно. – uwegeercken
Это был быстрый ответ и правильное решение. и вы даже отформатировали мой текст правильно (я не использовал stackoverflow в течение многих лет). – uwegeercken
@uwegeercken Если ответ помог, вы можете подумать о его продолжении и/или отметить его как отвечая на ваш вопрос. Это поможет другим с подобными проблемами найти решение более легко. –