कैश और हठ के बीच अंतर क्या है?


जवाबों:


222

इसके साथ cache(), आप केवल डिफ़ॉल्ट संग्रहण स्तर का उपयोग करते हैं:

  • MEMORY_ONLYके लिए RDD
  • MEMORY_AND_DISKके लिए डेटासेट

इसके साथ persist(), आप निर्दिष्ट कर सकते हैं कि आप आरडीडी और डेटासेट दोनों के लिए कौन सा संग्रहण स्तर चाहते हैं ।

आधिकारिक डॉक्स से:

  • आप RDDइस पर persist() या cache() विधियों का उपयोग कर बनाए रखने के लिए चिह्नित कर सकते हैं ।
  • प्रत्येक RDDका उपयोग कर एक अलग संग्रहीत किया जा सकता हैstorage level
  • cache() विधि डिफ़ॉल्ट संग्रहण स्तर है, जो प्रयोग करने के लिए एक आशुलिपि है StorageLevel.MEMORY_ONLY(दुकान स्मृति में वस्तुओं deserialized)।

persist()यदि आप इसके अलावा अन्य संग्रहण स्तर असाइन करना चाहते हैं तो उपयोग करें :

  • MEMORY_ONLYकरने के लिए RDD
  • या MEMORY_AND_DISKके लिए डेटासेट

आधिकारिक दस्तावेज के लिए दिलचस्प लिंक: कौन सा भंडारण स्तर चुनना है


17
ध्यान दें कि cache()अब MEMORY_AND_DISK
ximiki

मुझे नहीं लगता कि उपरोक्त टिप्पणी सही है। नवीनतम आधिकारिक दस्तावेज़ीकरण को पढ़ना, लिंक का उपयोग करके ahars अंतिम बुलेट बिंदु के साथ संरेखण प्रदान करता है ... कैश () विधि डिफ़ॉल्ट स्टोरेज स्तर का उपयोग करने के लिए एक शॉर्टहैंड है, जो StorageLevel.MEMORY_ONLY (मेमोरी में ऑब्जेक्ट्सरलाइज्ड ऑब्जेक्ट को स्टोर करता है) है।
user2596560

1
@ximiki, MEMORY_AND_DISKकेवल डेटासेट के लिए डिफ़ॉल्ट मान है। MEMORY_ONLYRDD
ahars

1
@ user2596560 टिप्पणी डेटासेट के डिफ़ॉल्ट कैश मान के लिए सही है। आप RDD के लिए सही हैं जो अभी भी MEMORY_ONLY डिफ़ॉल्ट मान
अरहस

83

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 पर बने रहने की आवश्यकता है )

सिर्फ इसलिए कि आप 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कारण दोनों शब्दों को अक्सर एक दूसरे के स्थान पर उपयोग किया जाता है।

अधिक नेत्रहीन यहाँ देखें ....

मेमोरी और डिस्क में बने रहें:

यहां छवि विवरण दर्ज करें

कैश

कैशिंग आपके एप्लिकेशन के प्रदर्शन को काफी हद तक सुधार सकता है।

यहां छवि विवरण दर्ज करें


मेरे पास एक ब्लॉक के अंदर एक DF है। मैं इसे कैसे एक्सेस कर सकता हूं।
बिंदूमलिनी केके

48

इसमें कोई फर्क नही है। से 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()

23

स्पार्क 5 प्रकार का स्टोरेज स्तर देता है

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache()उपयोग करेंगे MEMORY_ONLY। यदि आप कुछ और उपयोग करना चाहते हैं, तो उपयोग करें persist(StorageLevel.<*type*>)

डिफ़ॉल्ट रूप persist()से JVM हीप में डेटा को अनारक्षित वस्तुओं के रूप में संग्रहित करेगा।


4

Cache () और persist () दोनों तरीकों का उपयोग स्पार्क संगणना के प्रदर्शन को बेहतर बनाने के लिए किया जाता है। इन विधियों से मध्यवर्ती परिणामों को बचाने में मदद मिलती है ताकि बाद के चरणों में उनका पुन: उपयोग किया जा सके।

कैश () और पर्सिस्ट () के बीच एकमात्र अंतर है, कैश तकनीक का उपयोग करके हम इंटरमीडिएट रिजल्ट को केवल मेमोरी में बचा सकते हैं, जबकि पर्सिस्ट () में हम इंटरमीडिएट रिजल्ट को 5 स्टोरेज लेवल (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER) में सेव कर सकते हैं। DISK_ONLY)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.