विभिन्न अजगर गुठली के बीच DataFrame को फिर से लोड करने से बचें


10

क्या स्मृति में एक चर (बड़ी तालिका / डेटा फ़्रेम) रखने का एक तरीका है और इसे कई ipython पुस्तिकाओं में साझा किया जा सकता है?

मैं कुछ खोज रहा हूँ, जो वैचारिक रूप से MATLAB के लगातार चर के समान हो। वहाँ कई व्यक्तिगत संपादकों (नोटबुक) से एक कस्टम फ़ंक्शन / लाइब्रेरी को कॉल करना संभव है, और उस बाहरी फ़ंक्शन को कुछ परिणाम (या बड़ी तालिका) कैश करते हैं।

अधिकतर मैं एक भारी उपयोग की गई तालिका को फिर से लोड करने से बचना चाहूंगा (जिसे एक कस्टम लाइब्रेरी के माध्यम से लोड किया जाता है जिसे नोटबुक से कहा जाता है), क्योंकि इसे पढ़ने के बाद जब भी मैं एक नया विश्लेषण शुरू करता हूं तो लगभग 2-3 मिनट लगते हैं।


1
यह संभव प्रतीत नहीं होता है, और यदि आप सावधान नहीं हैं तो यह बहुत अधिक सिरदर्द पैदा कर सकता है। क्या डेटा को एक कुशल प्रारूप में पेश करना है जैसे कि msgpack एक विकल्प नहीं है?
Emre

@Emre धन्यवाद। Msgpack के साथ एक मुश्किल हिस्सा यह है कि यह तालिका को पढ़ने की आवश्यकता की अंतर्निहित समस्या को हल नहीं करता है। इसके अलावा यह दोधारी तलवार है: जबकि यह तालिका के मूल प्रारूप की तुलना में लगभग 40% समय बचाता है, यह मैनुअल विश्लेषण को मूल डेटा (जो कम साफ है) से एक छोटा कदम दूर
रखता है

मुझे लगता है कि सबसे अच्छा विकल्प रेडिस की तरह एक कैश है, जिसे मेसपैक के साथ संयोजन के रूप में इस्तेमाल किया जा सकता है। कम से कम आप डिस्क के बजाय मेमोरी को जारी रख सकते हैं।
एमरे १

1
मैं पंख का उपयोग करने पर विचार करूंगा - यह बहुत तेज़ है
मैक्स

1
क्या स्पार्क और यह कैशिंग एक विकल्प होगा? आप अनिवार्य रूप से अपनी प्रारंभिक रीडिंग / प्रोसेसिंग करने के लिए अपनी नोटबुक में स्पार्क का उपयोग करने तक सीमित
रहेंगे

जवाबों:


4

यदि यह आपके उपयोग के मामलों के लिए महत्वपूर्ण है, तो आप Apache Zeppelin पर स्विच करने का प्रयास कर सकते हैं। जैसा कि सभी स्पार्क नोटबुक में एक ही स्पार्क संदर्भ, एक ही पायथन चल रहा वातावरण है। https://zeppelin.apache.org/

तो आप जो पूछ रहे हैं वह मूल रूप से ज़ेपेलिन में होता है। या पूर्ण होने के लिए, यह एक स्पार्क संदर्भ / सभी स्पार्क नोटबुक के बीच एक ही पायथन एनवायरनमेंट को साझा करने का एक विकल्प है (उन्हें ज़ेपेलिन में 'नोट्स' कहा जाता है):

ज़ेपेलिन में स्पार्क इंटरप्रेटर शेयरिंग विकल्प

तो आप संदर्भ को साझा करने का विकल्प चुन सकते हैं विश्व स्तर पर (डिफ़ॉल्ट ज़ेपेलिन का व्यवहार), प्रति नोट (केवल संभव बृहस्पति का व्यवहार), या प्रति उपयोगकर्ता।

यदि आप Zeppelin पर स्विच नहीं करना चाहते हैं / नहीं कर रहे हैं, तो अपनी नोटबुक के बीच सामान्य डेटाफ़्रेम को साझा करने के अन्य विकल्पों को देखें:

ps। आप वर्तमान में अभी तक ज़ेपलिन को ipynb फ़ाइलों को आयात नहीं कर सकते हैं (इसका अपना नोटबुक प्रारूप एक json फ़ाइल के रूप में संग्रहीत है), जब तक https://issues.apache.org/jira/browse/ZEPPELIN-1793 लागू नहीं किया जाता है; हालांकि यह ज्यादातर मामलों में मैन्युअल रूप से परिवर्तित करने के लिए उतना कठिन नहीं है।


1
धन्यवाद। मैं शायद ipython / jupyter पुस्तिकाओं से दूर चला जाऊंगा। क्या zeppelin केवल चुनिंदा चर की सामग्री को साझा करने की संभावना का समर्थन करता है, लेकिन विभिन्न संपादकों / नोटबुक्स / नोटों के भीतर किसी भी नामांकित चर का नहीं? (जैसे MATLAB करता है)
tsttst

दुर्भाग्य से - नहीं, यह एक प्रक्रिया स्तर पर नियंत्रित है। तो यह सब या कुछ भी नहीं है। यदि आप प्रति नोट चुनते हैं, तो यह जुपिटर की तरह ही व्यवहार होगा। यदि आप ग्लोबली चुनते हैं, तो वे सब कुछ साझा करेंगे। हम सामान्य रूप से ग्लोबली उपयोग करते हैं क्योंकि यह विशेष रूप से बहु-उपयोगकर्ता वातावरण में कम संसाधन-गहन है। थोड़ी देर के लिए मतलाब का उपयोग नहीं किया गया, लेकिन अगर आपको केवल चुने हुए चर के लिए साझा करना है - तो आप अपाचे एरो या पंख पर एक नज़र रख सकते हैं, अगर यह जुपिटर या ज़ेपेलिन है।
तगार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.