取消
顯示的結果
而不是尋找
你的意思是:

. lang迭代讀和寫原因。OutOfMemoryError: GC開銷限製超過

Chalki
新的貢獻者三世

我有一個迭代算法,讀和寫一個dataframe迭代槽新分區列表,如下:

在partitions_list: p
df = spark.read.parquet (“adls_storage / p”)
df.write。 格式 ( “δ” ).mode ( “覆蓋” ).option ( “partitionOverwriteMode” , “動態” )
.saveAsTable (schema.my_delta_table)

馬克斯分區數據大小2 tb。這份工作經常成功4日重新運行後的管道。經常不能由於GC開銷限製超過。在標準輸出我觀察很多GC分配失敗。請檢查屏幕快照。

像之前的執行計劃dataframes呆在司機的記憶。這是如此嗎?
有沒有一種方法每次迭代後清洗它嗎?

3回複3

Chalki
新的貢獻者三世

我忘了提到df創建我使用過濾方法,導致實際上p是一個對象:

{secure_key cntr_id: 12日:15日load_dates: [date1日期2…]。過濾器的樣子:

df = spark.read.parquet (“adls_storage”)。((坳(cntr_id) = = p [cntr_id]) & ((load_date)上校.isin (p [load_dates])

daniel_sahal
尊敬的貢獻者三世

@Chalki
GC分配失敗有點混亂——這表明,GC堆因為沒有足夠的內存。這很正常,你不應該擔心GC分配失敗。

更擔心的是“GC開銷限製超過”,這意味著JVM花太多的時間做GC和沒有大收獲。

不做一個適當的調試代碼的我會說——隻是擴大。

Chalki
新的貢獻者三世

@daniel_sahal我附錯了剪/實際上是完整GC工效學,這是困擾我。現在我將正確的剪斷。但是當你說我了。我忘了說的是,表是寬——超過300列。我不是創建額外的對象內部的循環,除了dataframe在每次迭代中,但它會覆蓋下一個。
我仍然不知道如何記憶建設這麼多司機節點。你能給我一些更詳細的信息嗎?我自己的知識

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map