स्काला और स्पार्क का उपयोग करना, मैं निम्नलिखित निर्माण किया है:स्कैला कंपाइलर कैसे अप्रयुक्त परिवर्तनीय मानों को संभालता है?
val rdd1: RDD[String] = ...
val rdd2: RDD[(String, Any)] = ...
val rdd1pairs = rdd1.map(s => (s, s))
val result = rdd2.join(rdd1pairs)
.map { case (_: String, (e: Any, _)) => e }
मानचित्रण rdd1
के प्रयोजन के एक PairRDD
में बाद के चरण में rdd2
के साथ शामिल है। हालांकि, मैं वास्तव में केवल rdd2
के मानों में रूचि रखता हूं, इसलिए आखिरी पंक्ति में मैपिंग चरण जो कुंजी को छोड़ देता है। असल में, यह rdd2
और rdd1
के बीच स्पार्क के join()
के साथ दक्षता कारणों के लिए प्रदर्शन किया गया है।
मेरा प्रश्न rdd1pairs
की चाबियों को संदर्भित करता है: वे केवल पहले मानचित्र चरण में सिंटैक्टिकल कारणों (शामिल होने की अनुमति देने के लिए) बनाए जाते हैं और बाद में किसी भी उपयोग के बिना त्याग दिए जाते हैं। संकलक इसे कैसे संभालता है? क्या यह स्मृति खपत के मामले में मायने रखता है चाहे मैं स्ट्रिंग s
(उदाहरण में दिखाया गया है) का उपयोग करता हूं? क्या मुझे इसे थोड़ी मेमोरी बचाने के लिए null
या 0
द्वारा प्रतिस्थापित करना चाहिए? क्या संकलक वास्तव में इन वस्तुओं (संदर्भ) को बनाते हैं और स्टोर करते हैं या क्या यह ध्यान देता है कि उनका कभी भी उपयोग नहीं किया जाता है?
उचित लगता है, धन्यवाद। हालांकि, मुझे अभी भी यकीन नहीं है कि यूनिट के संदर्भों को संग्रहीत करने से मूल स्ट्रिंग संस्करण की तुलना में स्मृति की एक महत्वपूर्ण मात्रा बचाती है। क्या यह? – Carsten
उस विषय को कवर करने के लिए मेरा उत्तर बढ़ाया है – mattinbits
लेकिन मूल प्रश्न में कोई नया स्ट्रिंग नहीं बनाया गया है। स्ट्रिंग का संदर्भ '()' के संदर्भ के समान आकार है। –