[英]Spark save(write) parquet only one file
如果我寫
dataFrame.write.format("parquet").mode("append").save("temp.parquet")
在 temp.parquet 文件夾中,我得到了與行號相同的文件號
我想我不完全了解鑲木地板,但它是自然的嗎?
在寫操作前使用coalesce
dataFrame.coalesce(1).write.format("parquet").mode("append").save("temp.parquet")
編輯-1
仔細觀察, 文檔確實警告了coalesce
但是,如果您進行了劇烈的合並,例如 numPartitions = 1,這可能會導致您的計算發生在比您喜歡的更少的節點上(例如,在 numPartitions = 1 的情況下只有一個節點)
因此,正如@Amar所建議的,最好使用repartition
盡管以前的答案是正確的,但您必須了解重新分區或合並到單個分區后的影響。 您的所有數據都必須傳輸到單個工作人員才能立即將其寫入單個文件。
正如互聯網上反復提到的那樣,盡管將 shuffle 步驟添加到執行計划中,但您應該在這種情況下使用repartition
。 此步驟有助於使用集群的功能,而不是按順序合並文件。
至少有一種替代方案值得一提。 您可以編寫一個簡單的腳本,將所有文件合並為一個。 這樣您就可以避免向集群的單個節點生成大量網絡流量。
您可以將分區設置為 1 以保存為單個文件
dataFrame.repartition(1).write.format("parquet").mode("append").save("temp.parquet")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.