"Committers in Spark В спарке есть такая штука, как коммиттеры. Они нужны, чтобы пользователи видели только успешные финальные результаты. Их несколько: ✨ File Output Committer v1 ```""spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version"" = 1``` Сначала все файлы пишутся во временные папки в attempt/, потом перекладываются (по сути rename) в task/ и в самом конце в корень вашей папки. Тут упор на надежность: если что-то упало, то оно перезапустится и не попадет в конечную папку, пока не отработает v2 ```""spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version"" = 2``` Здесь файлы пишутся в attempt/, а потом сразу перемещаются в корень вашей папки. Тут упор на производительность: нет дополнительного шага, но если что-то пойдет не так, то останутся куски файлов ✨ S3A Committers Для работы с s3 есть magic и staging. Предыдущие не подходят, т.к. переименование реализовано как копирование и удаление. И если файлов много, то это очень долгая операция magic ```""spark.hadoop.fs.s3a.committer.name"" = ""magic"" ""spark.hadoop.fs.s3a.committer.magic.enabled"" = ""true""``` Файлы пишутся сразу в корень, но облако должно быть консистентным. Появился в конце 2021 staging С ним я не игралась, но суть в том, что сами файлы пишутся в стейджинг на hdfs (отсюда и название), а потом грузятся в s3 _SUCCESS Возможно, вы когда-нибудь заглядывали в файл _SUCCESS. Если писать алгоритмами v1/v2, то он будет пустым. А вот пример с magic: ```{ ""name"" : ""org.apache.hadoor.fs.3a.commit. files.SuccessData/1"", ""timestamp"" : 1744183768995, ""date"" : ""Wed Apr 09 10:29:28 MSK 2025"", ""committer"" : ""magic"", ""description"" : ""Task committer attempt_202504091019345870801396712503545_6660_m_1000000_0"", ""metrics"" : { ""stream_write_block_uploads"" : 0, ""files_created"" : 1, ""stream_closed"" : 200, ...```"