df
.write
.option("mapreduce.fileoutputcommitter.algorithm.version", "2")
.partitionBy("XXXXXXXX")
.mode(SaveMode.Append)
.format(fileFormat)
.save(path)
Когда Spark добавляет данные в существующий набор данных, Spark использует FileOutputCommitter для управления промежуточными выходными файлами и конечными выходными файлами. Поведение FileOutputCommitter напрямую влияет на производительность заданий, которые записывают данные.
FileOutputCommitter имеет два метода commitTask и commitJob. Apache Spark 2.0 и более поздние версии используют Apache Had oop 2, который использует значение mapreduce.fileoutputcommitter.algorithm.version для управления работой commitTask и commitJob. В Had oop 2 значение mapreduce.fileoutputcommitter.algorithm.version по умолчанию равно 1. Для этой версии commitTask перемещает данные, сгенерированные задачей, из временного каталога задачи во временный каталог задания, а когда все задачи завершены, commitJob перемещает данные из рабочего временного каталога в конечный пункт назначения.
Поскольку драйвер выполняет работу commitJob, для облачного хранилища эта операция может занять много времени. Вы можете часто думать, что ваша камера «висит». Тем не менее, когда значение mapreduce.fileoutputcommitter.algorithm.version равно 2, commitTask перемещает данные, сгенерированные задачей, непосредственно в конечный пункт назначения, а commitJob в основном не используется.