Saya memecahkan masalah saya. Alasan penghitungan yang tidak konsisten adalah MongoDefaultPartitioner yang membungkus MongoSamplePartitioner yang menggunakan random sampling. Sejujurnya ini adalah default yang cukup aneh bagi saya. Saya pribadi lebih suka memiliki partisi yang lambat tapi konsisten. Detail untuk opsi partisi dapat ditemukan di opsi konfigurasi resmi dokumentasi.
kode:
val df = spark.read
.format("com.mongodb.spark.sql.DefaultSource")
.option("uri", "mongodb://127.0.0.1/enron_mail.messages")
.option("partitioner", "spark.mongodb.input.partitionerOptions.MongoPaginateBySizePartitioner ")
.load()