2016-03-27 13 views
0

mongo-hadoop bağlacı kullanarak verileri kıvılcım içine okumaya çalışıyorum. Sorun, okunan verilerle ilgili bir sınır belirlemeyi denediğimde, RDD'ye sınırların * bölme sayısını alamam.MongoHadoop Bağlayıcılar, çoğaltma sonuçları ile kullanılır

mongodbConfig.set("mongo.job.input.format","com.mongodb.hadoop.MongoInputFormat"); 
mongodbConfig.set("mongo.input.uri", "mongodb://localhost:27017/test.restaurants"); 
mongodbConfig.set("mongo.input.limit","3"); 
JavaPairRDD<Object, BSONObject> documents = sc.newAPIHadoopRDD(
      mongodbConfig,   // Configuration 
      MongoInputFormat.class, // InputFormat: read from a live cluster. 
      Object.class,    // Key class 
      BSONObject.class   // Value class 
    ); 

    long count = documents.count(); 
    System.out.println("Collection Count: " + count); 
    System.out.println("Partitions: " + documents.partitions().size()); 

//9 elements in the RDD = limit * nrOfPartions = 3 * 3 
//3 partitions 

Bu davranış, başkaları için tekrarlanabilirdir (her zaman sınırlanır * 3).

Sadece objectId ile sorgulamayı denediğimde benzer davranışı alıyorum (Aynı nesneye sahip bir RDD oluşturur * bölme sayısı - benim durumumda aynı belgeye sahip 3 öğe).

Ayrıca yardımcı olacaksa, mongo koleksiyonunu oluşturmak için komut dosyası da sağlayabilirim.

cevap

1

Bu bir özellik değil, bir hatadır. mongo.input.limit, MongoInputSplit için limit parameter'u ayarlamak için kullanılır; dolayısıyla, bölümleme olarak bölümleme temelinde değil, global olarak uygulanır. Genel olarak getirilen kayıtların sayısını sınırlamak için genel olarak (veya tam olarak uygulanabilir) mümkün değildir. Her bölünme bağımsız olarak işlenir ve tipik olarak, her bölünmeden elde edilen kayıtların sayısı hakkında bir ön bilgi yoktur.