अजगर के खोल में pyspark आयात करना


111

यह किसी अन्य फोरम पर किसी और के प्रश्न की एक प्रति है, जिसका कभी उत्तर नहीं दिया गया था, इसलिए मैंने सोचा कि मैं इसे फिर से पूछूंगा, क्योंकि मेरे पास एक ही मुद्दा है। (देखें http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

मैंने स्पार्क को अपनी मशीन पर ठीक से स्थापित किया है और जब उपयोग करते समय त्रुटि के बिना pyspark मॉड्यूल के साथ python प्रोग्राम चलाने में सक्षम होता हूं। मेरे python दुभाषिया के रूप में /bin/pyspark।

हालाँकि, जब मैं नियमित पायथन शेल को चलाने का प्रयास करता हूं, जब मैं pyspark मॉड्यूल को आयात करने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है:

from pyspark import SparkContext

और यह कहता है

"No module named pyspark".

मैं इसे कैसे ठीक करूं? क्या एक पर्यावरण चर है जिसे मुझे पायसपार्क हेडर / लाइब्रेरी / आदि के लिए पायथन को इंगित करने की आवश्यकता है? अगर मेरी स्पार्क इंस्टॉलेशन / स्पार्क / है, तो मुझे किस पीस्पार्क पथ को शामिल करने की आवश्यकता है? या pyspark प्रोग्राम केवल pyspark दुभाषिया से चलाया जा सकता है?


वे कहते हैं कि पर्यावरण चर को बदलना "सुपर प्रभावी नहीं है, क्योंकि यह बिन / स्पार्क-सबमिट द्वारा बहुत जल्दी ओवरराइड किया जाता है।" हो सकता है कि आप इस मुद्रा से कुछ सीख सकते हैं
इमामग्रस

जवाबों:


97

यहाँ एक सरल विधि है (यदि आप परेशान नहीं हैं कि यह कैसे काम करता है !!! !!!

Findpark का उपयोग करें

  1. अपने अजगर के खोल पर जाओ

    pip install findspark
    
    import findspark
    findspark.init()
  2. आवश्यक मॉड्यूल आयात करें

    from pyspark import SparkContext
    from pyspark import SparkConf
  3. किया हुआ!!!


अन्य समाधान मेरे काम नहीं आए। मैं अपने प्रोग्राम में अभी के लिए findpark का उपयोग कर रहा हूँ। समस्या को एक सभ्य समाधान की तरह लगता है।
विश्लेषणात्मक भिक्षु

मुझे ऐसा करने की आवश्यकता नहीं है .. लेकिन हे .. कुछ और काम नहीं दिया .. मैं इसे ले जाऊंगा।
जवदाबा

51

यदि यह ऐसी त्रुटि प्रिंट करता है:

ImportError: py4j.java_gateway नाम का कोई मॉड्यूल नहीं

कृपया $ SPARK_HOME / python / PYTHONPATH में जोड़ें:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

9
एक और जवाब में बताया गया है stackoverflow.com/questions/26533169/... मैं निम्नलिखित निर्यात PYTHONPATH = $ SPARK_HOME जोड़ने के लिए किया था / अजगर / lib / py4j-0.8.2.1-src.zip: $ PYTHONPATH
Meyerson

46

पता चलता है कि pyspark बिन लोडिंग अजगर है और स्वचालित रूप से सही पुस्तकालय पथों को लोड कर रहा है। $ SPARK_HOME / बिन / pyspark देखें:

# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

मैंने इस लाइन को अपनी .bashrc फ़ाइल में जोड़ दिया और मॉड्यूल अब सही ढंग से मिल गए हैं!


1
इस कदम के अलावा, मुझे यह भी जोड़ना चाहिए: export SPARK_HOME=~/dev/spark-1.1.0आंकड़ा जाना। आपके फ़ोल्डरनाम अलग-अलग हो सकते हैं।
इमामग्रस

21

अपनी py फ़ाइल को इस रूप में न चलाएं: python filename.py इसके बजाय उपयोग करें:spark-submit filename.py


क्या कोई ऐसा करने के लिए विस्तार कर सकता है? मैं इस सवाल पर गौर कर रहा हूं लेकिन अभी तक कोई भी ऐसा नहीं खोज पाया है जो यह बता सके कि ऐसा क्यों है।
मिंट

@ अन्य उत्तर बताते हैं कि क्यों; pyspark पैकेज डिफ़ॉल्ट रूप से $ PYTHONPATH में शामिल नहीं है, इस प्रकार import pysparkयह कमांड लाइन पर या निष्पादित स्क्रिप्ट में विफल हो जाएगा। आपको या तो ए। स्पार्क्स के माध्यम से pyspark चलाएं जैसा कि इरादा है या b। $ PYTHONPATH में $ SPARK_HOME / अजगर जोड़ें।
Kingledion

एक अन्य बिंदु स्पार्क-सबमिट एक शेल स्क्रिप्ट है, जो स्पार्क का उपयोग करने से पहले सिस्टम के वातावरण को सही ढंग से कॉन्फ़िगर करने में आपकी मदद करता है, अगर आप सिर्फ अजगर मेनहोम करते हैं तो आपको सिस्टम वातावरण को सही ढंग से कॉन्फ़िगर करने की आवश्यकता है जैसे PYTHONPATH, SPARK_HOME
E.ZY.

21

SPARK पथ और Py4j पथ निर्यात करके, इसने काम करना शुरू कर दिया:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

इसलिए, यदि आप इन हर प्रकार को टाइप नहीं करना चाहते हैं, तो आप पायथन शेल को फायर करना चाहते हैं, आप इसे अपनी .bashrcफाइल में जोड़ना चाह सकते हैं।


1
मैं अपनी स्थापना, किसी भी विचार में libexec निर्देशिका नहीं ढूँढ सकता हूँ Apache Spark?
अल्बर्टो बोन्सेंटो

@AlbertoBonsanto क्षमा करें। मैंने इस मुद्दे का सामना नहीं किया है। तो, कोई विचार नहीं :(
Dawny33

1
हाँ, उन्होंने स्पार्क 1.5.2 में लिबेर्सेक फ़ोल्डर निकाल लिया
ब्लरुबज़

1
@bluerubez स्पार्क 1.6.2 में होने लगता है ... इसके अलावा, यह सुनिश्चित नहीं है कि libexec/python/buildनिर्देशिका किस लिए है, लेकिन स्पार्क 1.6.2 में ऐसा नहीं है
OneCricketeer

17

मैक पर, मैं स्पार्क (सूत्र "अपाचे-स्पार्क") स्थापित करने के लिए होमब्रे का उपयोग करता हूं। फिर, मैंने PYTHONPATH को इस तरह सेट किया ताकि पायथन आयात काम करे:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH

अपने मैक पर वास्तविक अपाचे-स्पार्क संस्करण के साथ "1.2.0" को बदलें।


14

Pyspark में स्पार्क के निष्पादन के लिए दो घटकों को एक साथ काम करने की आवश्यकता होती है:

  • pyspark अजगर पैकेज
  • एक जेवीएम में स्पार्क का उदाहरण

स्पार्क-सबमिट या pyspark के साथ चीजों को लॉन्च करते समय, ये स्क्रिप्ट दोनों का ध्यान रखेगी, अर्थात वे आपके PYTHONPATH, PATH, इत्यादि को सेट करेंगे, ताकि आपकी स्क्रिप्ट pyspark को खोज सके, और वे स्पार्क उदाहरण को भी शुरू कर दें, जो आपके params के अनुसार कॉन्फ़िगर हो रहा है , जैसे - मास्टर एक्स

वैकल्पिक रूप से, इन लिपियों को दरकिनार करना और अपने स्पार्क एप्लिकेशन को सीधे अजगर इंटरप्रेटर की तरह चलाना संभव है python myscript.py। यह विशेष रूप से दिलचस्प है जब स्पार्क स्क्रिप्ट अधिक जटिल होने लगते हैं और अंततः अपने स्वयं के आर्ग्स प्राप्त करते हैं।

  1. सुनिश्चित करें कि पायसपार्क पैकेज पायथन दुभाषिया द्वारा पाया जा सकता है। जैसा कि पहले ही चर्चा की गई है कि या तो स्पाय / पाइथन डायर को PYTHONPATH में जोड़ें या सीधे पिपपार्क को पिप इंस्टॉल का उपयोग करके इंस्टॉल करें।
  2. अपनी स्क्रिप्ट से स्पार्क उदाहरण के पैरामीटर सेट करें (जो कि pyspark को पास किया जाता था)।
    • स्पार्क कॉन्फ़िगरेशन के लिए जैसा कि आप सामान्य रूप से सेट करते हैं --conf वे SparkSession.builder.config में एक कॉन्फिग ऑब्जेक्ट (या स्ट्रिंग कॉन्फिग) के साथ परिभाषित होते हैं
    • मुख्य विकल्पों (जैसे - मास्टर, या -ड्राइवर-मेम) के लिए आप उन्हें PYSPARK_SUBMIT_ARGS पर्यावरण चर पर लिखकर सेट कर सकते हैं। चीजों को साफ करने और सुरक्षित बनाने के लिए आप इसे पायथन के भीतर से ही सेट कर सकते हैं, और स्पार्क इसे शुरू करते समय पढ़ेंगे।
  3. उदाहरण शुरू करें, जिसके लिए आपको getOrCreate()बिल्डर ऑब्जेक्ट से कॉल करना होगा ।

इसलिए आपकी स्क्रिप्ट कुछ इस तरह हो सकती है:

from pyspark.sql import SparkSession

if __name__ == "__main__":
    if spark_main_opts:
        # Set main options, e.g. "--master local[4]"
        os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"

    # Set spark config
    spark = (SparkSession.builder
             .config("spark.checkpoint.compress", True)
             .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
             .getOrCreate())

9

छुटकारा पाने के लिए ImportError: No module named py4j.java_gateway, आपको निम्नलिखित पंक्तियों को जोड़ना होगा:

import os
import sys


os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4"


sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python")
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip")

try:
    from pyspark import SparkContext
    from pyspark import SparkConf

    print ("success")

except ImportError as e:
    print ("error importing spark modules", e)
    sys.exit(1)

7

विंडोज 10 पर निम्नलिखित ने मेरे लिए काम किया। मैंने सेटिंग्स > अपने खाते के लिए पर्यावरण चर संपादित करें का उपयोग करते हुए निम्नलिखित पर्यावरण चर जोड़े :

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%

("C: \ Programming \ ..." उस फ़ोल्डर में बदलें जिसमें आपने स्पार्क स्थापित किया है)


5

लिनक्स उपयोगकर्ताओं के लिए, PYTHONPATH में pyspark libaray को शामिल करने का सही (और गैर-कठिन-कोडित) तरीका है। दोनों पेट भागों आवश्यक हैं:

  1. पाइस्पार्क पायथन मॉड्यूल के लिए पथ ही, और
  2. ज़िप्ड लाइब्रेरी का रास्ता जो कि pyspark मॉड्यूल आयात होने पर निर्भर करता है

नीचे दिया गया नोटिस कि ज़िप्ड लाइब्रेरी संस्करण गतिशील रूप से निर्धारित है, इसलिए हम इसे हार्ड-कोड नहीं करते हैं।

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}

4

मैं एक स्पार्क क्लस्टर चला रहा हूं, CentOS VM पर, जो क्लाउडडे यम पैकेज से स्थापित है।

Pyspark चलाने के लिए निम्नलिखित चर सेट करना पड़ा।

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

यह मैंने स्पार्क के साथ अपने एनाकोंडा वितरण का उपयोग करने के लिए किया था। यह स्पार्क संस्करण स्वतंत्र है। आप पहली पंक्ति को अपने उपयोगकर्ताओं के अजगर बिन में बदल सकते हैं। इसके अलावा, स्पार्क के रूप में 2.2.0 PySpark PyPi पर एक स्टैंड-अलोन पैकेज के रूप में उपलब्ध है, लेकिन मैं अभी इसका परीक्षण कर रहा हूं।


4

आप नीचे दिए अनुसार pyspark pathअजगर का उपयोग कर सकते हैं pip(यदि आपने PIP का उपयोग करके pyspark स्थापित किया है)

pip show pyspark

3

मुझे भी यही समस्या थी।

यह भी सुनिश्चित करें कि आप सही पायथन संस्करण का उपयोग कर रहे हैं और आप इसे सही पाइप संस्करण के साथ स्थापित कर रहे हैं। मेरे मामले में: मेरे पास अजगर 2.7 और 3.x दोनों थे। मैं के साथ pyspark स्थापित किया है

pip2.7 pyspark स्थापित करें

और यह काम किया।


2

मुझे यह त्रुटि मिली क्योंकि मैं जिस अजगर स्क्रिप्ट को सबमिट करने की कोशिश कर रहा था उसे pyspark.py ( facepalm ) कहा गया । यह तय था कि मेरी PYTHONPATH को ऊपर बताई गई विधि के अनुसार सेट किया जाए, फिर स्क्रिप्ट का नाम बदलकर pyspark_test.py और क्लीन अप pyspark.pyc जो कि मेरी स्क्रिप्ट के मूल नाम के आधार पर बनाई गई थी और जिसने इस त्रुटि को साफ किया।


2

DSE (DataStax Cassandra & Spark) के मामले में निम्नलिखित स्थान को PYTHONPATH में जोड़ना होगा

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

तब पथ में मॉड्यूल प्राप्त करने के लिए dse pyspark का उपयोग करें।

dse pyspark

2

मुझे भी यही समस्या थी और उपरोक्त प्रस्तावित समाधानों में एक बात और जोड़ूंगा। Spark को स्थापित करने के लिए Mac OS X पर Homebrew का उपयोग करते समय आपको रास्ते में libexec शामिल करने के लिए py4j पथ पते को ठीक करने की आवश्यकता होगी (आपके पास जो आपके पास है py4j संस्करण बदलने के लिए याद रखना);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH

नोट - मैंने इसे अनज़िप करने की कोशिश की और py4jकेवल फ़ोल्डर का उपयोग किया, काम नहीं किया। ज़िप फ़ाइल का उपयोग करें ...
एल ड्यूड

2

मेरे मामले में यह एक अलग अजगर dist_package (अजगर 3.5) में स्थापित हो रहा था, जबकि मैं अजगर 3.6 का उपयोग कर रहा था, इसलिए नीचे ने मदद की:

python -m pip install pyspark

1

आप अल्पाइन के साथ एक डॉक कंटेनर भी बना सकते हैं जैसे कि OS और संकुल के रूप में Python और Pyspark स्थापित करें। यह सब कंटेनरीकृत होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.