您好,登錄后才能下訂單哦!
這篇文章主要講解了“RDD的持久化怎么理解”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“RDD的持久化怎么理解”吧!
Spark最重要的一個功能,就是在不同操作間,持久化(或緩存)一個數(shù)據(jù)集在內(nèi)存中。當(dāng)你持久化一個RDD,每一個結(jié)點都將把它的計算分塊結(jié)果保存在內(nèi)存中,并在對此數(shù)據(jù)集(或者衍生出的數(shù)據(jù)集)進行的其它動作中重用。這將使得后續(xù)的動作(Actions)變得更加迅速(通???0倍)。緩存是用Spark構(gòu)建迭代算法的關(guān)鍵。
你可以用persist()或cache()方法來標(biāo)記一個要被持久化的RDD,然后一旦首次被一個動作(Action)觸發(fā)計算,它將會被保留在計算結(jié)點的內(nèi)存中并重用。Cache有容錯機制,如果RDD的任一分區(qū)丟失了,通過使用原先創(chuàng)建它的轉(zhuǎn)換操作,它將會被自動重算(不需要全部重算,只計算丟失的部分)。當(dāng)需要刪除被持久化的RDD,可以用unpersistRDD()來完成該工作。
此外,每一個RDD都可以用不同的保存級別進行保存,從而允許你持久化數(shù)據(jù)集在硬盤,或者在內(nèi)存作為序列化的Java對象(節(jié)省空間),甚至于跨結(jié)點復(fù)制。這些等級選擇,是通過將一個org.apache.spark.storage.StorageLevel對象傳遞給persist()方法進行確定。cache()方法是使用默認存儲級別的快捷方法,也就是StorageLevel.MEMORY_ONLY(將反序列化的對象存入內(nèi)存)。
StorageLevel有五個屬性,分別是:useDisk_是否使用磁盤,useMemory_是否使用內(nèi)存,useOffHeap_是否使用堆外內(nèi)存如:Tachyon,deserialized_是否進行反序列化,replication_備份數(shù)目。
完整的可選存儲級別如下:
存儲級別的選擇
Spark的不同存儲級別,旨在滿足內(nèi)存使用和CPU效率權(quán)衡上的不同需求。我們建議通過以下的步驟來進行選擇:
?如果你的RDDs可以很好的與默認的存儲級別(MEMORY_ONLY)契合,就不需要做任何修改了。這已經(jīng)是CPU使用效率最高的選項,它使得RDDs的操作盡可能的快。?如果不行,試著使用MEMORY_ONLY_SER并且選擇一個快速序列化的庫使得對象在有比較高的空間使用率的情況下,依然可以較快被訪問。
?
盡可能不要存儲到硬盤上,除非計算數(shù)據(jù)集的函數(shù),計算量特別大,或者它們過濾
了大量的數(shù)據(jù)。否則,重新計算一個分區(qū)的速度,和與從硬盤中讀取基本差不多快。
感謝各位的閱讀,以上就是“RDD的持久化怎么理解”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對RDD的持久化怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。