Имена файлов Spark CSV 2.1

я пытаюсь сохранить DataFrame в CSV, используя новую опцию spark 2.1 csv

 df.select(myColumns: _*).write
                  .mode(SaveMode.Overwrite)
                  .option("header", "true")
                  .option("codec", "org.apache.hadoop.io.compress.GzipCodec")
                  .csv(absolutePath)

все работает нормально, и я не возражаю против префикса part-000XX, но теперь кажется, что какой-то UUID был добавлен в качестве суффикса

i.e
part-00032-10309cf5-a373-4233-8b28-9e10ed279d2b.csv.gz ==> part-00032.csv.gz

Кто-нибудь знает, как я могу удалить этот файл ext и остаться только с соглашением part-000XX

Спасибо


person Avi P    schedule 18.03.2017    source источник
comment
Проверьте это stackoverflow.com/questions/41990086/   -  person Dhanesh    schedule 18.03.2017
comment
спасибо @Dhanesh, но я использую S3, поэтому переименование после сохранения файла не так просто (учитывайте, что файлы могут быть > 5 ГБ). часть-000XX в порядке. мне не очень нравится новый номер UUID, прикрепленный к суффиксу   -  person Avi P    schedule 18.03.2017
comment
просто посмотрите два варианта: либо переместите файл s3 в новый с нужным вам именем, либо сохраните в локальной файловой системе FS или HDFS, переименуйте его и переместите в S3. stackoverflow .com/questions/21184720/   -  person Dhanesh    schedule 19.03.2017


Ответы (1)


Вы можете удалить UUID, переопределив параметр конфигурации «spark.sql.sources.writeJobUUID»:

https://github.com/apache/spark/commit/0818fdec3733ec5c0a9caa48a9c0f2cd25f84d13#diff-c69b9e667e93b7e4693812cc72abb65fR75

К сожалению, это решение не будет полностью отражать старый стиль saveAsTextFile (т. е. part-00000), но может сделать имя выходного файла более разумным, например, part-00000-output.csv.gz, где «выход» — это значение, которое вы передаете spark.sql.sources.writeJobUUID. "-" добавляется автоматически

SPARK-8406 — это соответствующая проблема Spark, и вот фактический запрос на включение: https://github.com/apache/spark/pull/6864

person Garren S    schedule 12.04.2017
comment
По-видимому, это больше не вариант с последними версиями spark, имя создается внутри как fpart-$split%05d-$jobId$ext github.com/apache/spark/blob/branch-2.3/core/src/main /scala/org/, а jobId берется из hasoops mapreduce.job.id, в который лучше не вмешиваться. - person MxR; 16.03.2018
comment
Хм, знаете ли вы о новых способах достижения аналогичной цели в более новых версиях? - person Garren S; 16.03.2018
comment
Увы, другого способа, кроме как пропатчить сам Spark, найти не удалось, а учитывая стоимость обслуживания и явную неправомерность такого действия, мы решили переписать части нашей системы, которые на него полагаются. Другим вариантом может быть запрос на вытягивание, чтобы вернуть этот параметр конфигурации, но шансы не выглядят хорошими, так как он один раз подвергался рефакторингу. Кроме того, у нас на самом деле нет искровых коммиттеров в нашей команде, чтобы помочь нам в этой тяжелой битве ^_^ - person MxR; 16.03.2018