मुझे लगता है कि सवाल बेहतर होगा:
हमें कब कॉल करने या RDD पर बने रहने की आवश्यकता है?
स्पार्क प्रक्रियाएं आलसी हैं, अर्थात जब तक इसकी आवश्यकता नहीं होगी, तब तक कुछ भी नहीं होगा। प्रश्न का त्वरित उत्तर देने के लिए, val textFile = sc.textFile("/user/emp.txt")
जारी किए जाने के बाद , डेटा के लिए कुछ भी नहीं होता है, केवल एक HadoopRDD
निर्माण होता है, फ़ाइल को स्रोत के रूप में उपयोग करते हुए।
मान लें कि हम उस डेटा को थोड़ा बदल देते हैं:
val wordsRDD = textFile.flatMap(line => line.split("\\W"))
फिर, डेटा के लिए कुछ भी नहीं होता है। अब एक नया आरडीडी wordsRDD
है जिसमें testFile
जरूरत पड़ने पर एक संदर्भ और लागू करने के लिए एक फ़ंक्शन शामिल है।
केवल जब कोई कार्रवाई RDD पर कॉल की जाती है, जैसे wordsRDD.count
, RDD श्रृंखला, जिसे वंश कहा जाता है, निष्पादित किया जाएगा। यही है, डेटा, विभाजन में टूट गया, स्पार्क क्लस्टर के निष्पादकों द्वारा लोड किया flatMap
जाएगा , फ़ंक्शन लागू किया जाएगा और परिणाम की गणना की जाएगी।
एक रेखीय वंश पर, इस उदाहरण में एक की तरह, cache()
जरूरत नहीं है। डेटा निष्पादकों को लोड किया जाएगा, सभी परिवर्तनों को लागू किया जाएगा और अंत में count
गणना की जाएगी, सभी मेमोरी में - यदि डेटा मेमोरी में फिट बैठता है।
cache
आरडीडी शाखाओं का वंश जब बाहर निकलता है तो उपयोगी होता है। मान लीजिए कि आप पिछले उदाहरण के शब्दों को सकारात्मक और नकारात्मक शब्दों की गिनती में फ़िल्टर करना चाहते हैं। आप ऐसा कर सकते हैं:
val positiveWordsCount = wordsRDD.filter(word => isPositive(word)).count()
val negativeWordsCount = wordsRDD.filter(word => isNegative(word)).count()
यहां, प्रत्येक शाखा डेटा का पुनः लोड जारी करती है। एक स्पष्ट cache
विवरण जोड़ना यह सुनिश्चित करेगा कि पहले किया गया प्रसंस्करण संरक्षित है और पुन: उपयोग किया जाता है। नौकरी इस तरह दिखाई देगी:
val textFile = sc.textFile("/user/emp.txt")
val wordsRDD = textFile.flatMap(line => line.split("\\W"))
wordsRDD.cache()
val positiveWordsCount = wordsRDD.filter(word => isPositive(word)).count()
val negativeWordsCount = wordsRDD.filter(word => isNegative(word)).count()
उस कारण से, cache
'वंश को तोड़ने के लिए' कहा जाता है क्योंकि यह एक चौकी बनाता है जिसे आगे की प्रक्रिया के लिए पुन: उपयोग किया जा सकता है।
अंगूठे का नियम: cache
जब आपके RDD की वंशावली निकलती है या जब RDD का उपयोग लूप की तरह कई बार किया जाता है।