2016-12-01 16 views
7

मै मैप और मैप के बीच सैद्धांतिक मतभेदों के माध्यम से पढ़ता हूं, & मैं विभिन्न स्थितियों में उनका उपयोग करने के लिए बहुत स्पष्ट हूं।स्पार्क आरडीडी- मानचित्र बनाम नक्शापार्टिशन

लेकिन नीचे वर्णित मेरी समस्या जीसी गतिविधि & मेमोरी (रैम) पर आधारित है। कृपया समस्या के लिए नीचे पढ़ें: -

=> मैंने पंक्ति से स्ट्रिंग को परिवर्तित करने के लिए एक नक्शा फ़ंक्शन लिखा था। तो, आरडीडी [org.apache.spark.sql.Row] का एक इनपुट आरडीडी [स्ट्रिंग] में मैप किया जाएगा। लेकिन इस दृष्टिकोण के साथ आरडीडी की प्रत्येक पंक्ति के लिए मानचित्र वस्तु बनाई जाएगी। इस प्रकार ऐसी बड़ी संख्या में वस्तुओं का निर्माण जीसी गतिविधि में वृद्धि कर सकता है।

=> ऊपर हल करने के लिए, मैंने मैपपार्टिशन का उपयोग करने के बारे में सोचा। तो, वस्तुओं की संख्या विभाजन की संख्या के बराबर हो जाती है। मैप पार्टिशन इटरेटर को इनपुट के रूप में देता है और लौटने के लिए स्वीकार करता है और java.lang.Iterable। लेकिन अधिकांश इटेबल जैसे ऐरे, लिस्ट इत्यादि स्मृति में हैं। तो, अगर मेरे पास बड़ी मात्रा में डेटा है तो इस तरह से एक इटरबल बनाने से मेमोरी हो सकती है? या क्या कोई अन्य संग्रह (जावा या स्कैला) है जिसका उपयोग यहां किया जाना चाहिए (स्मृति को भरने के मामले में डिस्क तक फैलाने के लिए)? या आरडीडी मेमोरी में पूरी तरह से होने पर हम केवल नक्शापार्टिशन का उपयोग कर सकते हैं?

अग्रिम धन्यवाद। किसी भी तरह की सहायता का स्वागत किया जाएगा।

उत्तर

1

अगर आपको लगता है के बारे में JavaRDD.mapPartitions यह FlatMapFunction लेता है (या DoubleFlatMapFunction जैसे कुछ संस्करण) जो की उम्मीद है Iterator नहीं Iterable वापस जाने के लिए। अगर अंडरलेइंग संग्रह आलसी है तो आपके पास चिंता करने की कोई बात नहीं है।

RDD.mapPartitionsIterator से Iterator पर एक फ़ंक्शन लेता है।

सामान्य यदि आप संदर्भ डेटा का उपयोग करते हैं तो आप mapPartitionsmap के साथ प्रतिस्थापित कर सकते हैं और डेटा स्टोर करने के लिए स्थिर सदस्य का उपयोग कर सकते हैं। इसमें एक ही पदचिह्न होगा और लिखना आसान होगा।

+0

स्थिर चर होने से समझ में नहीं आता है। क्योंकि आपका नक्शा ऑब्जेक्ट हर बार बनाया जाएगा। इसके अलावा, अगर कुछ एक मशीन पर पैरारलिज्म प्राप्त करने में सक्षम हैं तो मुझे स्थैतिक चर सिंक्रनाइज़ करना चाहिए था। इसके अलावा, FlatMapFunction आपको "सार्वजनिक Iterable कॉल (Iterator itr)" –

+1

भी लिखता है, क्या आप कृपया मुझे आलसी संग्रह के बारे में बता सकते हैं या स्मृति के मामले में डिस्क तक फैल सकते हैं (यदि इसे अधिकतम मेमोरी बफर सीमा प्राप्त होती है) ?? –

संबंधित मुद्दे