tout d'abord j'utilise OS Windows XP 32 bits, MongoDB comme NoSQL DB et Eclipse en tant que programme d'édition. J'ai reçu une mission de mon école à propos de MapReduce, alors j'ai décidé de trouver combien de personnes en âge de travailler et de personnes non actives utilisaient mapreduce. J'utilise ce code pour entrer des données et enregistrer en tant que Insert.java:J'ai eu une erreur en utilisant MapReduce dans MongoDB
package mongox;
import com.mongodb.BasicDBObject;
import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
public class Insert {
public static void main(String[] args) {
try{
Mongo mongox = new Mongo();
DB db = mongox.getDB("DBPublic");
DBCollection koleksi = db.getCollection("lancestorvalley");
BasicDBObject object = new BasicDBObject();
object = new BasicDBObject();
object.put("NIK", "7586930211");
object.put("Name", "Richard Bou");
object.put("Sex", "M");
object.put("Age", "31");
object.put("Blood", "A");
object.put("Status", "Married");
object.put("Education", "Bachelor degree");
object.put("Employment", "Labor");
koleksi.insert(object);
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
J'utilise ce code pour MapReduce et enregistrer en tant que Mapreduce.java:
package mongox;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.Mongo;
public class Mapreduce {
public static void main(String[] args) {
try{
Mongo mongox = new Mongo("localhost", 27017);
DB db = mongox.getDB("DBPublic");
DBCollection koleksi = db.getCollection("lancestorvalley");
String map = "function() { "+
"var category; " +
"if (this.Age >= 15 && this.Age <=59) "+
"category = 'Working-Age Population'; " +
"else " +
"category = 'Non-Working-Age Population'; "+
"emit(category, {Nama: this.Nama});}";
String reduce = "function(key, values) { " +
"var sum = 0; " +
"values.forEach(function(doc) { " +
"sum += 1; "+
"}); " +
"return {data: sum};} ";
MapReduceCommand cmd = new MapReduceCommand(koleksi, map, reduce,
null, MapReduceCommand.OutputType.INLINE, null);
MapReduceOutput out = koleksi.mapReduce(cmd);
for (DBObject o : out.results()) {
System.out.println(o.toString());
}
}
catch(Exception e){
e.printStackTrace();;
}
}
}
I déjà entrée 5000 données et quand je lance la Mapreduce.java la sortie est:
{ "_id" : "Non-Working-age population" , "value" : { "data" : 41.0}}
{ "_id" : "Working-age Population" , "value" : { "data" : 60.0}}
y at-il quelque chose de mal avec mon code dans Mapreduce.java? pourquoi la sortie est seulement comme ça alors que les données sont d'environ 5000? Espérons que quelqu'un pourrait me aider, Merci avant gars
Ce serait mieux fait avec l'agrégation. Consultez la [réduire les exigences de la fonction] (http://docs.mongodb.org/manual/reference/command/mapReduce/#mapreduce-reduce-cmd). Map/reduce peut exécuter la fonction de réduction plusieurs fois sur la même clé et attend un tableau pour les valeurs. – wdberkeley