Je ne pense pas qu'il y ait une "bonne" requête - vous devez interroger en fonction des données que vous souhaitez traiter
J'ai rencontré le même problème.
Je crois que newAPIHadoopRDD, compte tenu de la MongoInputSplit.class, ne tient pas compte de la requête lors du calcul des fractionnements. Il n'est appliqué qu'après le calcul des fractionnements. Cela signifie que peu importe la finesse de votre requête, le nombre de fractionnements restera le même et sera proportionnel à la taille de la collection.
newAPIHadoopRDD utilise le StandaloneMongoSplitter. Notez que cette classe n'utilise pas la requête pour calculer les limites de fractionnement. Il utilise simplement la commande interne "splitVector" de mongo ; à partir de la documentation ici - http://api.mongodb.org/internal/current/ commandes.html , il semble également qu'il ne tient pas compte de la requête.
Je n'ai pas de bonne solution cependant. Une meilleure approche diviserait la collection mongo seulement après calculer la requête, mais cela nécessite une autre implémentation du séparateur. Voici quelques bonnes lectures sur le problème :http:// www.ikanow.com/how-well-does-mongodb-integrate-with-hadoop/