Jag tror inte att det finns en "rätt" fråga - du måste fråga baserat på den data du vill bearbeta
Jag stötte på samma problem.
Jag tror att newAPIHadoopRDD, givet MongoInputSplit.class, inte tar hänsyn till frågan vid beräkning av delningarna. Den tillämpas först efter att delningarna har beräknats. Det betyder att oavsett hur smal din fråga är, kommer antalet delningar att förbli detsamma och kommer att vara proportionell mot storleken på samlingen.
newAPIHadoopRDD använder StandaloneMongoSplitter. Observera att den här klassen inte använder frågan för att beräkna de delade gränserna. Det är bara att använda mongos interna "splitVector"-kommando; från dokumentationen här - http://api.mongodb.org/internal/current/ commands.html , det verkar också som att det inte tar hänsyn till frågan.
Jag har dock ingen bra lösning. Ett bättre tillvägagångssätt skulle dela upp mongosamlingen först efter beräknar frågan, men detta kräver en annan implementering av splittern. Här är lite bra läsning om problemet:http:// www.ikanow.com/how-well-does-mongodb-integrate-with-hadoop/