2014-09-11 5 views
0

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

+0

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

Répondre

1

MongoDB docs déclarent explicity le ci-dessous, ce qui pourrait être la cause du comportement non prévu:

Platform Support 

Starting in version 2.2, MongoDB does not support Windows XP. Please use a more recent version of Windows to use more recent releases of MongoDB. 

De plus:

MongoDB for Windows 32-bit runs on any 32-bit version of Windows newer than Windows XP. 32-bit versions of MongoDB are only intended for older systems and for use in testing and development systems. 32-bit versions of MongoDB only support databases smaller than 2GB. 
+0

J'ai essayé sur Windows 7 (même code et 5000 données), et la sortie se passe mal aussi (même comme sur Windows XP) :( –