Tôi không nghĩ rằng có một truy vấn "đúng" - bạn cần phải truy vấn dựa trên dữ liệu bạn muốn xử lý
Tôi gặp phải vấn đề tương tự.
Tôi tin rằng newAPIHadoopRDD, được cung cấp bởi MongoInputSplit.class, không tính đến truy vấn khi tính toán các phần tách. Nó chỉ được áp dụng sau khi tính toán các phần chia nhỏ. Điều này có nghĩa là cho dù truy vấn của bạn có thể tinh gọn đến đâu, số lượng phần tách sẽ vẫn như nhau và sẽ tỷ lệ thuận với kích thước của bộ sưu tập.
newAPIHadoopRDD đang sử dụng StandaloneMongoSplitter. Lưu ý rằng lớp này không sử dụng truy vấn để tính toán ranh giới phân chia. Nó chỉ đang sử dụng lệnh "splitVector" nội bộ của mongo; từ tài liệu tại đây - http://api.mongodb.org/internal/current/ command.html , có vẻ như nó không tính đến truy vấn.
Tôi không có một giải pháp tốt mặc dù. Một cách tiếp cận tốt hơn sẽ chỉ chia bộ sưu tập mongo sau tính toán truy vấn, nhưng điều này yêu cầu một triển khai khác của bộ tách. Dưới đây là một số bài đọc hay về vấn đề này: http:// www.ikanow.com/how-well-does-mongodb-integrate-with-hadoop/