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

理解內存用於磚集群

negrinij
新的因素

你好,

我想知道如果任何人都可以給我任何的見解關於內存使用和我怎麼能改變我的代碼“釋放”一些內存運行的代碼。我用一個磚筆記本。

基本上,我們需要做的是執行一個查詢,創建一個sql dataframe火花並轉換為熊貓(是的,我知道熊貓並不是最好的,但現在要做)。代碼的方法是設置一個循環的形式調用一個函數來執行每個查詢的步驟是根據用戶請求。查詢的數量可能有所不同。

我的問題是,每一次的函數被調用時,我看到內存使用量的增加。我期望的內存會下降一個循環完成後,但它沒有。它不會隻漲不跌,釋放。似乎當它達到約100 - 120 gb,然後它開始峰回到100 gb的基線。這是一個很小的例子:

熊貓作為pd def create_query導入(查詢):query_spark_df = spark.sql(查詢)query_df_pd = query_spark_df.toPandas () query_df_pd [' col1 '] = query_df_pd [' col1 '] .astype (Int16) query_df_pd [' col2 '] = query_df_pd [' col2 '] .astype (Int16) query_df_pd [' col3 '] = query_df_pd [' col3 '] .astype (int32) #其他預處理步驟# #返回query_df_pd query_list = [query_1, query_2]在query_list查詢:測試= create_query(查詢)

我試著:

  • 刪除變量使用del和gc.collect ()
  • 使用後,我試圖將其他值分配給相同的變量,如query_spark_df = []
  • 我嚐試了一些火花選項如.unpersist(阻塞= True)和spark.catalog.clearCache ()

問題是,經過一天的用戶,我們使用集群,我們看起來像這樣:

image.png在下圖中,黑色的箭頭演示開始新工作時:

圖像唯一的選擇似乎使使用內存下降spark.stop()但是我不能使用這個循環的中間或最後的代碼可能會有其他工作同時運行。

有什麼火花選項,我可以添加到我的“循環”(或者至少到最後我的代碼),清理內存使用?正如我提到的,GC收集沒有影響。我應該使用不同的功能?任何Python最佳實踐,我錯過什麼?任何幫助都是感激。

2回答2

shan_chandra
尊敬的貢獻者二世
尊敬的貢獻者二世

@Juliana Negrini——你能多次調用以下方法直到你看到內存讓減少清除內存嗎?

def NukeAllCaching(表名:選項[String] = None):單位={表名。= > com.databricks.sql.transaction.tahoe.DeltaValidation地圖{路徑。在validateCache(spark, path) } spark.conf.set("spark.databricks.io.cache.enabled", "false") spark.conf.set("spark.databricks.delta.smallTable.cache.enabled", "false") spark.conf.set("spark.databricks.delta.stats.localCache.maxNumFiles", "1") spark.conf.set("spark.databricks.delta.fastQueryPath.dataskipping.checkpointCache.enabled", "false") com.databricks.sql.transaction.tahoe.DeltaLog.clearCache() spark.sql("CLEAR CACHE") sqlContext.clearCache() } NukeAllCaching()

上麵的解決方案是一種補丁,需要多次調用。最理想的方法是分析你的代碼是否寫的高效性能,內存使用情況和可用性。

shan_chandra
尊敬的貢獻者二世
尊敬的貢獻者二世

@Juliana Negrini——關於你的示例代碼,您可以使用火花的分布式查詢功能查詢運行使用火花而不是熊貓。所以,你不必在熊貓之間切換數據幀和數據幀火花。

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

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

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

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

Baidu
map