你一定要
緩存()
抽樣和DataFrames在下列情況下:
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美元
你好Mefryar,
我還看到持續的緩存是一個別名(StorageLevel.MEMORY_ONLY)。附加文檔鏈接。
官方文檔
官方Pyspark醫生
嗨,@Sivagangireddy Singam Singam。我看到抽樣編程指南說默認的存儲水平
MEMORY_ONLY
,但最新的PySpark文檔(如果是2.4.4)狀態“默認的存儲水平發生了變化
MEMORY_AND_DISK
”(PySpark文檔你與2.1.2)。