2015-12-20 176 views
6

我使用下面的代碼保存火花數據幀以JSON文件如何避免在保存DataFrame時生成crc文件和SUCCESS文件?

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 
  1. 如何生成一個JSON文件,而不是每一個文件線?
  2. 如何避免* crc文件?
  3. 如何避免SUCCESS文件?

回答

8

如果你想有一個單一的文件,你需要調用write之前做​​3210到單個分區,所以:

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

就個人而言,我覺得很煩人,輸出文件的數量取決於在撥打write之前您有分區數 - 特別是如果您使用partitionBywrite - 但據我所知,目前沒有其他方法。

我不知道是否有辦法禁用.crc文件 - 我不知道其中一個 - 但是可以通過在Spark上下文的hadoop配置中設置以下內容來禁用_SUCCESS文件。

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

注意,你可能還需要禁用元數據文件的生成有:

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

顯然,生成的元數據文件需要一定的時間(見this blog post),但實際上並沒有那麼重要(根據this)。就個人而言,我總是禁用它們,而且我沒有任何問題。

+0

問題是爲什麼我們需要'CRC'和'_SUCCESS'文件? Spark(worker)節點同時寫入數據,這些文件充當驗證的校驗和。寫入單個文件會消除分佈式計算的想法,如果結果文件過大,則此方法可能會失敗。 –

相關問題