से कॉल करना मैं स्थानीय मोड में पाइस्पार्क 1.5 का उपयोग कर अपने 4 कोर 16 जीबी मशीन पर सभी 3 मिलियन रिकॉर्ड x 15 कॉलम पर वर्कफ़्लो चला रहा हूं। मैंने देखा है कि यदि मैं स्पार्क को पुनरारंभ करने के बिना फिर से वही वर्कफ़्लो चलाता हूं, तो स्मृति समाप्त हो जाती है और मुझे मेमोरी अपवादों से बाहर निकलता है।मैन्युअल रूप से स्पार्क के कचरा संग्रह को pyspark
चूंकि मेरे सभी कैश लगभग 1 जीबी तक हैं, मैंने सोचा कि समस्या कचरा संग्रह में निहित है। मैं पाइथन कचरा कलेक्टर मैन्युअल रूप से कॉल करके चला सकता था:
import gc
collected = gc.collect()
print "Garbage collector: collected %d objects." % collected
इससे थोड़ा सा मदद मिली है।
मैंने article के अनुसार स्पार्क के जीसी की सेटिंग्स के साथ खेला है, और आरडीडी को संपीड़ित करने और सीरियलाइज़र को Kyro में बदलने की कोशिश की है। इसने प्रसंस्करण को धीमा कर दिया था और स्मृति के साथ बहुत मदद नहीं की थी।
चूंकि मुझे पता है कि जब मेरे पास जीसी कॉल करने के लिए अतिरिक्त सीपीयू चक्र हैं, तो यह मेरी स्थिति को यह जानने में मदद कर सकता है कि इसे JVM में मैन्युअल रूप से कैसे कॉल करें।
हां मैंने इसे कई बार पढ़ा है लेकिन मुझे अभी भी लगता है कि मेरा मामला कई कारणों से मैन्युअल जीसी के लिए योग्य है: ए। पाइथन जीसी को कॉल करना फायदेमंद था क्योंकि यह उनके आकार के बजाय कचरा वस्तुओं की संख्या को मानता है, बी। मेरे आवेदन की प्रकृति में ऐसे चरण शामिल हैं जहां उपयोगकर्ता निर्णय के इंतजार के दौरान कोई गणना नहीं होती है, और सी। अगर मुझे कुछ मेमोरी-गहन पायथन कार्यक्षमता या पूरी तरह से अलग एप्लिकेशन चलाने की ज़रूरत है तो क्या होगा? मुझे संदेह है कि JVM जीसी उस – architectonic
के लिए जिम्मेदार होगा यदि आपको जेवीएम पर स्मृति-गहन कार्यक्षमता चलाना है (यदि पायथन के लिए नहीं पता है), तो वीएम आपके द्वारा उपयोग की जाने वाली सभी मेमोरी का उपयोग करेगा और यदि इसकी आवश्यकता है दुर्घटना (क्योंकि जेवीएम आपकी इच्छा का सम्मान करता है;)। जीसी को कॉल करें जब कोई कंप्यूटिंग अच्छा विचार नहीं देखा जा सकता है, लेकिन यह जीसी एक पूर्ण जीसी होगा और पूर्ण जीसी धीमी धीमी है। अगर आपको आउट ऑफ़ मेमोरी अपवाद का सामना करना पड़ता है तो यह जीसी समस्या नहीं है! यह एक कोड समस्या है! या तो अधिक स्मृति या स्मृति रिसाव की आवश्यकता है। – crak