Ответ 1
По существу, метод RDD zipWithIndex(), похоже, делает это, но он не сохранит первоначальный порядок данных, из которых был создан RDD. По крайней мере, вы получите стабильный заказ.
val orig: RDD[String] = ...
val indexed: RDD[(String, Long)] = orig.zipWithIndex()
Причина, по которой вы вряд ли найдете что-то, что сохраняет порядок в исходных данных, зарывается в API doc для zipWithIndex():
"Заменяет этот RDD своими индексами элементов. Сначала упорядочение по индексу раздела, а затем упорядочивание элементов в каждом раздел. Таким образом, первый элемент в первом разделе получает индекс 0 и последний элемент последнего раздела получает наибольший индекс. Эта похож на Scala zipWithIndex, но использует Long вместо Int как тип индекса. Этот метод должен запускать искровое задание, когда этот RDD содержит более одного раздела.
Итак, похоже, что исходный порядок отбрасывается. Если для вас важно сохранить исходный порядок, похоже, вам нужно добавить индекс перед созданием RDD.