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

我應該總是緩存抽樣和DataFrames嗎?

cfregly
貢獻者
6個回答6

cfregly
貢獻者

你一定要

緩存()
抽樣和DataFrames在下列情況下:

  • 在一個迭代循環(即重用它們。ML算法)
  • 重用多次抽樣在單個應用程序中,工作,或者筆記本。
  • 前期成本再生抽樣分區時昂貴的(即。HDFS,經過一係列複雜的
    map ()
    ,
    filter ()
    等),這有助於在複蘇過程中如果一個工人節點死亡。

記住,火花就會自動從工人以LRU的方式驅逐抽樣分區。LRU驅逐發生獨立對每個工人和取決於工人的可用內存。

在生命周期的抽樣,抽樣在內存或磁盤分區可能存在跨集群取決於可用內存。

火花UI上的存儲選項卡顯示了分區存在跨集群(內存或磁盤)在任何給定的時間點上。

請注意,

緩存()
是一個別名
堅持(StorageLevel.MEMORY_ONLY)
這可能不是理想的數據集大於可用集群內存。每個抽樣分區,驅逐出內存需要從源(即重建。HDFS、網絡等),是昂貴的。

一個更好的解決方案是使用

堅持(StorageLevel.MEMORY_AND_DISK_ONLY)
將泄漏抽樣分區工人的本地磁盤如果他們趕出內存。在這種情況下,重建一個分區隻需要將數據從工人的本地磁盤相對較快。

你也可以選擇堅持附加的數據作為一個序列化的字節數組

_SER
如下:
MEMORY_SER
MEMORY_AND_DISK_SER
。這可以節省空間,但是會增加一個額外的序列化/反序列化點球。因為我們存儲數據序列化的字節數組,那麼創建Java對象,因此GC壓力降低。

你也可以選擇複製附加到另一個節點的數據

_2
StorageLevel(序列化或不是序列化)如下:
MEMORY_SER_2
MEMORY_AND_DISK_2
。這使得快速分區恢複節點故障的情況下,數據可以從rack-local重建,鄰近節點通過相同的網絡交換機,為例。

在這裏你可以看到完整的列表:https://spark.apache.org/docs/latest/api/scala/index.html org.apache.spark.storage.StorageLevel美元

MichaelFryar_
新的貢獻者二世

請注意,

緩存()
現在是一個別名嗎
堅持(StorageLevel.MEMORY_AND_DISK)
根據文檔

你好Mefryar,

我還看到持續的緩存是一個別名(StorageLevel.MEMORY_ONLY)。附加文檔鏈接。

官方文檔

官方Pyspark醫生

嗨,@Sivagangireddy Singam Singam。我看到抽樣編程指南說默認的存儲水平

MEMORY_ONLY

,但最新的PySpark文檔(如果是2.4.4)狀態“默認的存儲水平發生了變化

MEMORY_AND_DISK

”(PySpark文檔你與2.1.2)。

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

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

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

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

Baidu
map