I am using the following code to save a spark DataFrame to JSON file
unzipJSON.write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")
the output result is:
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
enable. summary-metadata=false". We can also disable the _SUCCESS file using "mapreduce. fileoutputcommitter.
File created by Total Commander, a program used to organize and manage files in Windows; contains a Cyclic Redundancy Check (CRC) code for a split archive; used to verify that files from a split archive have correctly been restored back to the original file.
In Big Data Management (BDM0, when Spark writes to S3 a complex file of type Parquet, the resulting files may contain an additional _SUCCESS. This file is used by Spark to provide a method to confirm all the partitions have been written correctly. You can control this by setting the Hadoop property: mapreduce.
If you want a single file, you need to do a coalesce
to a single partition before calling write, so:
unzipJSON.coalesce(1).write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")
Personally, I find it rather annoying that the number of output files depend on number of partitions you have before calling write
- especially if you do a write
with a partitionBy
- but as far as I know, there are currently no other way.
I don't know if there is a way to disable the .crc files - I don't know of one - but you can disable the _SUCCESS file by setting the following on the hadoop configuration of the Spark context.
sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
Note, that you may also want to disable generation of the metadata files with:
sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
Apparently, generating the metadata files takes some time (see this blog post) but aren't actually that important (according to this). Personally, I always disable them and I have had no issues.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With