2017-04-21 10 views
6

मैंने python module बनाया और मैं इसे अपने pyspark एप्लिकेशन में आयात करना चाहता हूं।pyspark आयात उपयोगकर्ता परिभाषित मॉड्यूल या .py फ़ाइलें

मेरे पैकेज निर्देशिका संरचना है:

wesam/ 
|-- data.py 
`-- __init__.py 

एक साधारण import wesam मेरी pyspark स्क्रिप्ट के शीर्ष पर ImportError: No module named wesam की ओर जाता है। मैंने इसे ज़िप करने की कोशिश की और इसे --py-files के साथ recommended in this answer के साथ अपने कोड के साथ शिप किया, बिना किस्मत के।

./bin/spark-submit --py-files wesam.zip mycode.py 

मैं भी प्रोग्राम के रूप में के रूप में this answer ने सुझाव दिया फ़ाइल जोड़ा है, लेकिन मैं एक ही ImportError: No module named wesam त्रुटि मिली।

.sc.addPyFile("wesam.zip") 

मैं यहाँ क्या याद आ रही है?

उत्तर

12

यह पता चला कि चूंकि मैं अपना आवेदन client mode में सबमिट कर रहा हूं, तो मशीन से मैं spark-submit कमांड चलाता हूं, जो ड्राइवर प्रोग्राम चलाएगा और मॉड्यूल फ़ाइलों तक पहुंचने की आवश्यकता होगी।

enter image description here

मैं अपने .bashrc फ़ाइल में निम्न पंक्ति जोड़कर (या मेरा काम प्रस्तुत करने से पहले निष्पादित) द्वारा नोड मैं से मेरा काम प्रस्तुत करने कर रहा हूँ पर PYTHONPATH वातावरण चर करने के लिए अपने मॉड्यूल जोड़ा।

export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules 

और इससे समस्या हल हो गई। चूंकि पथ ड्राइवर नोड पर है, इसलिए मुझे मॉड्यूल को --py-files के साथ ज़िप और शिप करने की आवश्यकता नहीं है या sc.addPyFile() का उपयोग करें।

किसी भी pyspark मॉड्यूल आयात त्रुटि समस्या को हल करने की कुंजी समझ रहा है कि ड्राइवर या कार्यकर्ता (या दोनों) नोड्स मॉड्यूल फ़ाइलों की आवश्यकता है या नहीं।

महत्वपूर्ण कार्यकर्ता नोड्स अपने मॉड्यूल फ़ाइलों की जरूरत है, तो आप --py-files के साथ एक ज़िप संग्रह और इस तर्क अपने .py फ़ाइल तर्क पूर्व में होना चाहिए के रूप में यह पारित करने के लिए की जरूरत है।

यह सही है::

./bin/spark-submit --py-files wesam.zip mycode.py 

इस सही नहीं है:

./bin/spark-submit mycode.py --py-files wesam.zip 
+0

यह बहुत ही स्पष्ट और उपयोगी है उदाहरण के लिए, इन उदाहरणों में बहस के आदेश पर ध्यान दें। धन्यवाद! – watsonic

+0

हालांकि यह काम कर सकता है, आप प्रभावी रूप से अपने (संभवतः) विश्व स्तर पर $ HOME/.bashrc के माध्यम से अपने env को प्रभावी ढंग से घुमा रहे हैं। क्या कार्यकर्ता मॉड्यूल के PYTHONPATH को गतिशील रूप से सेट करने का कोई तरीका नहीं है? कारण आप ऐसा करना चाहते हैं कि आप ipython REPL से बातचीत कर रहे हैं और समानांतर नौकरियां शिप करना चाहते हैं जो PYTHONPATH में NFS पर बैठे मॉड्यूल पर निर्भर करते हैं (सोच पाइथन setup.py विकसित मोड)। – mathtick

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