जवाबों:
इसके साथ cache(), आप केवल डिफ़ॉल्ट संग्रहण स्तर का उपयोग करते हैं:
MEMORY_ONLYके लिए RDDMEMORY_AND_DISKके लिए डेटासेटइसके साथ persist(), आप निर्दिष्ट कर सकते हैं कि आप आरडीडी और डेटासेट दोनों के लिए कौन सा संग्रहण स्तर चाहते हैं ।
आधिकारिक डॉक्स से:
- आप
RDDइस परpersist() याcache() विधियों का उपयोग कर बनाए रखने के लिए चिह्नित कर सकते हैं ।- प्रत्येक
RDDका उपयोग कर एक अलग संग्रहीत किया जा सकता हैstorage levelcache() विधि डिफ़ॉल्ट संग्रहण स्तर है, जो प्रयोग करने के लिए एक आशुलिपि हैStorageLevel.MEMORY_ONLY(दुकान स्मृति में वस्तुओं deserialized)।
persist()यदि आप इसके अलावा अन्य संग्रहण स्तर असाइन करना चाहते हैं तो उपयोग करें :
MEMORY_ONLYकरने के लिए RDDMEMORY_AND_DISKके लिए डेटासेटआधिकारिक दस्तावेज के लिए दिलचस्प लिंक: कौन सा भंडारण स्तर चुनना है
MEMORY_AND_DISKकेवल डेटासेट के लिए डिफ़ॉल्ट मान है। MEMORY_ONLYRDD
cacheऔरpersistसंचालन के बीच का अंतर विशुद्ध रूप से वाक्यात्मक है। कैश दृढ़ता या दृढ़ता (MEMORY_ONLY) का एक पर्याय है , यानीcacheकेवलpersistडिफ़ॉल्ट भंडारण स्तर के साथ हैMEMORY_ONLY
/ ** * डिफ़ॉल्ट भंडारण स्तर (
MEMORY_ONLY) के साथ इस RDD को जारी रखें । * (
def persist (): this.type = persist (StorageLevel.MEMORY_ONLY)/ ** * डिफ़ॉल्ट भंडारण स्तर (
MEMORY_ONLY) के साथ इस RDD को जारी रखें । * (
def cache) (): this.type = persist ()
अधिक विवरण यहां देखें ...
कैशिंग या दृढ़ता (पुनरावृत्ति और संवादात्मक) स्पार्क अभिकलन के लिए अनुकूलन तकनीकें हैं। वे अंतरिम आंशिक परिणामों को बचाने में मदद करते हैं ताकि बाद के चरणों में उनका पुन: उपयोग किया जा सके। इन अंतरिम परिणामों को RDDएस के रूप में मेमोरी (डिफ़ॉल्ट) या डिस्क और / या प्रतिकृति जैसे अधिक ठोस भंडारण में रखा जाता है।
RDDs को cacheऑपरेशन के जरिए कैश किया जा सकता है । उन्हें persistऑपरेशन का उपयोग करके भी बनाए रखा जा सकता है ।
persist,cacheइन कार्यों का उपयोग भंडारण स्तर को समायोजित करने के लिए किया जा सकता है
RDD। स्मृति को मुक्त करते समय, स्पार्क भंडारण स्तर पहचानकर्ता का उपयोग यह तय करने के लिए करेगा कि कौन से विभाजन रखे जाने चाहिए। पैरामीटर कम वेरिएंटpersist() औरcache() के लिए केवल संक्षिप्त हैंpersist(StorageLevel.MEMORY_ONLY).चेतावनी : एक बार भंडारण स्तर बदल दिया गया है, इसे फिर से नहीं बदला जा सकता है!
सिर्फ इसलिए कि आप RDDस्मृति में कैश कर सकते हैं इसका मतलब यह नहीं है कि आपको आँख बंद करके ऐसा करना चाहिए। डेटासेट कितनी बार एक्सेस किया गया है और ऐसा करने में शामिल काम की मात्रा के आधार पर, पुनर्संयोजन बढ़े हुए स्मृति दबाव द्वारा भुगतान की गई कीमत से अधिक तेज हो सकती है।
यह कहे बिना जाना चाहिए कि यदि आप केवल एक बार एक डेटासेट पढ़ते हैं तो इसका कोई मतलब नहीं है, यह वास्तव में आपके काम को धीमा कर देगा। कैश्ड डेटासेट का आकार स्पार्क शेल से देखा जा सकता है।
सूचीबद्ध वेरिएंट ...
def cache(): RDD[T]
def persist(): RDD[T]
def persist(newLevel: StorageLevel): RDD[T]
* नीचे दिए गए उदाहरण देखें: *
val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
c.getStorageLevel
res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
c.cache
c.getStorageLevel
res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)
नोट: कैशिंग और दृढ़ता के बीच बहुत छोटे और विशुद्ध रूप से वाक्यगत अंतर के RDDकारण दोनों शब्दों को अक्सर एक दूसरे के स्थान पर उपयोग किया जाता है।
अधिक नेत्रहीन यहाँ देखें ....
मेमोरी और डिस्क में बने रहें:
कैशिंग आपके एप्लिकेशन के प्रदर्शन को काफी हद तक सुधार सकता है।
इसमें कोई फर्क नही है। से RDD.scala।
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()
स्पार्क 5 प्रकार का स्टोरेज स्तर देता है
MEMORY_ONLYMEMORY_ONLY_SERMEMORY_AND_DISKMEMORY_AND_DISK_SERDISK_ONLYcache()उपयोग करेंगे MEMORY_ONLY। यदि आप कुछ और उपयोग करना चाहते हैं, तो उपयोग करें persist(StorageLevel.<*type*>)।
डिफ़ॉल्ट रूप persist()से JVM हीप में डेटा को अनारक्षित वस्तुओं के रूप में संग्रहित करेगा।
Cache () और persist () दोनों तरीकों का उपयोग स्पार्क संगणना के प्रदर्शन को बेहतर बनाने के लिए किया जाता है। इन विधियों से मध्यवर्ती परिणामों को बचाने में मदद मिलती है ताकि बाद के चरणों में उनका पुन: उपयोग किया जा सके।
कैश () और पर्सिस्ट () के बीच एकमात्र अंतर है, कैश तकनीक का उपयोग करके हम इंटरमीडिएट रिजल्ट को केवल मेमोरी में बचा सकते हैं, जबकि पर्सिस्ट () में हम इंटरमीडिएट रिजल्ट को 5 स्टोरेज लेवल (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER) में सेव कर सकते हैं। DISK_ONLY)।
cache()अब MEMORY_AND_DISK