我正在研究帶有 2 個執行程式的 Apache Spark 獨立集群,每個執行程式都有 1g 堆空間和 8 個內核。
我將大小為 2.7Gb 的輸入檔案加載到資料幀df 中。這是使用 21 個任務成功完成的,也就是說,我在整個集群中總共使用了 21 個磁區。
現在我嘗試僅使用 1 個磁區將其寫入 csv,以便將所有記錄保存在 1 個 csv 檔案中。
df.coalesce(1).write.option("header","true").csv("output.csv")
我預計會出現 OOM 錯誤,因為執行程式的總可用記憶體小于 2.7Gb。但這并沒有發生。
盡管資料大于單個磁區,但我的任務如何不中斷?引擎蓋下到底發生了什么?
uj5u.com熱心網友回復:
原始 csv 檔案的原始格式(基于文本,無壓縮)大小為 2.7GB。當您使用 Spark 讀取該檔案時,它會根據spark.files.maxPartitionBytes默認為 128MB的配置將資料拆分為多個磁區。做數學會導致2700MB / 128MB = 21 partitions.
Spark 將資料保存在記憶體中,但使用它自己的
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316048.html
