Как избежать генерации файлов crc и файлов SUCCESS при сохранении DataFrame?

Я использую следующий код для сохранения искрового файла DataFrame в файл JSON

unzipJSON.write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")

результат вывода:

part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
_SUCCESS
._SUCCESS.crc
  • Как создать отдельный файл JSON, а не файл в строке?
  • Как я могу избежать * crc файлов?
  • Как я могу избежать файла SUCCESS?

Ответ 1

Если вам нужен один файл, вам нужно сделать coalesce в один раздел перед вызовом write, поэтому:

unzipJSON.coalesce(1).write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")

Лично я нахожу довольно раздражающим, что количество выходных файлов зависит от количества разделов, которые у вас есть до вызова write - особенно если вы делаете write с partitionBy - но, насколько я знаю, в настоящее время нет другого способа.

Я не знаю, есть ли способ отключить файлы .crc - я не знаю одного - но вы можете отключить файл _SUCCESS, установив следующее в конфигурации hadoop контекста Spark.

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

Обратите внимание, что вы также можете отключить генерацию файлов метаданных с помощью:

sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")

По-видимому, генерация файлов метаданных занимает некоторое время (см. это сообщение в блоге), но на самом деле это не так важно (согласно this). Лично я всегда их отключил, и у меня не было проблем.