Вот простой пример использования mapPartitionsWithIndex, который следует тем же правилам mapPartitions - исключая аспект индекса.
Вы можете видеть, что внутри mapPartitions вам нужно обработать целое число, Interator Int в этом примере.В этом случае 3 раздела обрабатываются, в вашем случае 8, либо с некоторыми записями, либо, возможно, с нулевыми записями.
val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9,10), 3)
def myfunc(index: Int, iter: Iterator[Int]) : Iterator[String] = {
iter.map(x => index + "," + x)
}
val rdd2 = rdd1.mapPartitionsWithIndex(myfunc)
Я не могу видеть в вашей функции, но я предполагаю, что это нормально, и он будет обрабатывать раздел - часть вашей базы данных.