2015-06-06 6 views
7

साथ interoperate करता रहा scala में नहीं लिखा हो अक्का प्रणाली कुछ Python कोड के लिए बाहर कॉल करने के लिए, Pandas और Numpy पर निर्भर की जरूरत है कि है, इसलिए मैं सिर्फ Jython का उपयोग नहीं कर सकते हैं। मैंने देखा कि स्पार्क अपने कार्यकर्ता नोड्स पर सीपीथन का उपयोग करता है, इसलिए मुझे उत्सुकता है कि यह पाइथन कोड कैसे निष्पादित करता है और क्या यह कोड कुछ पुनः उपयोग करने योग्य रूप में मौजूद है।कैसे स्पार्क CPython

उत्तर

9

पायस्पार्क आर्किटेक्चर का वर्णन यहां https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals है।

PySpark internals

@Holden के रूप में कहा स्पार्क जावा अजगर से JVM में वस्तुओं का उपयोग करने की py4j उपयोग करता है। लेकिन यह केवल एक मामला है - जब ड्राइवर प्रोग्राम पायथन में लिखा जाता है (वहां आरेख का बायां हिस्सा)

अन्य मामला (आरेख का सही हिस्सा) - जब स्पार्क वर्कर पाइथन प्रक्रिया शुरू करता है और पाइथन को क्रमबद्ध जावा ऑब्जेक्ट भेजता है संसाधित करने के लिए कार्यक्रम, और आउटपुट प्राप्त करता है। जावा ऑब्जेक्ट्स को अचार प्रारूप में क्रमबद्ध किया जाता है - इसलिए पायथन उन्हें पढ़ सकता है।

ऐसा लगता है कि आप जो खोज रहे हैं वह बाद का मामला है। यहाँ स्पार्क के स्केला कोर के लिए कुछ लिंक है कि उपयोगी हो सकता है आप आरंभ करने के लिए के लिए:

  • Pyrolite पुस्तकालय है कि अजगर के अचार प्रोटोकॉल के लिए जावा इंटरफेस प्रदान करता है - स्पार्क द्वारा प्रयोग किया जाता जावा अचार प्रारूप में वस्तुओं को क्रमानुसार करने। उदाहरण के लिए, कुंजी के मुख्य भाग, PairRDD के लिए वैल्यू जोड़े तक पहुंचने के लिए इस तरह के रूपांतरण की आवश्यकता है।

  • स्काला कोड है कि यह साथ अजगर प्रक्रिया और दोहराता शुरू होता है: api/python/PythonRDD.scala

  • SerDeser utils कि कोड का उठा है: api/python/SerDeUtil.scala

  • अजगर पक्ष: python/pyspark/worker.py

3

तो स्पार्क JVM और पायथन के बीच संवाद करने के लिए py4j का उपयोग करता है। यह स्पार्क को पायथन के विभिन्न संस्करणों के साथ काम करने की अनुमति देता है लेकिन उसे JVM से डेटा क्रमबद्ध करने और इसके विपरीत संचार करने की आवश्यकता होती है। http://py4j.sourceforge.net/ पर py4j पर अधिक जानकारी है, उम्मीद है कि मदद करता है :)