pyspark'ı python kabuğunda içe aktarma


111

Bu, başka bir forumda başka birinin sorusunun asla yanıtlanmamış bir kopyasıdır, bu yüzden aynı sorunu yaşadığım için burada tekrar soracağımı düşündüm. (Bkz. Http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

Spark'ı makinemde düzgün bir şekilde kurdum ve python yorumlayıcım olarak ./bin/pyspark'ı kullanırken hatasız pyspark modülleri ile python programlarını çalıştırabiliyorum.

Ancak, normal Python kabuğunu çalıştırmayı denediğimde, pyspark modüllerini içe aktarmaya çalıştığımda şu hatayı alıyorum:

from pyspark import SparkContext

ve diyor ki

"No module named pyspark".

Bunu nasıl düzeltebilirim? Python'u pyspark başlıklarına / kitaplıklarına / vb. İşaret etmek için ayarlamam gereken bir ortam değişkeni var mı? Kıvılcım kurulumum / spark / ise, hangi pyspark yollarını eklemem gerekir? Veya pyspark programları yalnızca pyspark yorumlayıcısından çalıştırılabilir mi?


Ortam değişkenlerini değiştirmenin "süper etkili olmadığını, çünkü bin / spark-submit tarafından çok hızlı bir şekilde geçersiz kılındığını" söylüyorlar. Belki bu alışverişten bir şeyler öğrenebilirsiniz
emmagras

Yanıtlar:


97

İşte basit bir yöntem (Nasıl çalıştığı konusunda endişelenmezseniz !!!)

Findspark kullanın

  1. Python kabuğunuza gidin

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. gerekli modülleri içe aktar

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. Bitti !!!


Diğer çözümler benim için işe yaramadı. Programımda şimdilik findspark kullanıyorum. Soruna iyi bir çözüm gibi görünüyor.
Analytical Monk

Bunu yapmak zorunda kalmamayı tercih ederim .. ama hey .. başka hiçbir işe yaramazsa .. Ben alacağım.
javadba

51

Böyle bir hata yazdırırsa:

ImportError: py4j.java_gateway adlı modül yok

Lütfen PYTHONPATH'a $ SPARK_HOME / python / build ekleyin:

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

9
Başka bir yanıtta açıklandığı gibi stackoverflow.com/questions/26533169/… Aşağıdaki dışa aktarımı eklemek zorunda kaldım PYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip: $ PYTHONPATH
meyerson

46

Pyspark bölmesinin python YÜKLENİYOR ve doğru kitaplık yollarını otomatik olarak yüklediği ortaya çıkıyor. $ SPARK_HOME / bin / pyspark'a göz atın:

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

Bu satırı .bashrc dosyama ekledim ve modüller artık doğru bir şekilde bulunuyor!


1
Bu adıma ek olarak, şunu da eklemem gerekiyordu:, export SPARK_HOME=~/dev/spark-1.1.0şekil ver. Klasör adlarınız değişebilir.
emmagras

21

py dosyanızı şu şekilde çalıştırmayın: python filename.py bunun yerine şunu kullanın:spark-submit filename.py


Birisi bunu neden yapmayacağını açıklayabilir mi? Bu soruyu araştırıyordum ama şimdiye kadar bunun nedenini açıklayan hiçbir şey bulamadım.
Darphane

@Mint Diğer cevaplar nedenini gösteriyor; pyspark paketi varsayılan olarak $ PYTHONPATH'a dahil değildir, bu nedenle import pysparkkomut satırında veya çalıştırılan bir betikte başarısız olur. Bir. pyspark'ı amaçlandığı gibi spark-submit aracılığıyla çalıştırın veya b. $ PYTHONPATH'a $ SPARK_HOME / python ekleyin.
kingledion

Diğer bir nokta da spark-submit, spark'ı kullanmadan önce sistem ortamını doğru şekilde yapılandırmanıza yardımcı olan bir kabuk betiğidir, eğer sadece python main.py'yi yaparsanız, sistem ortamını doğru şekilde yapılandırmanız gerekir, örn. PYTHONPATH, SPARK_HOME
E.ZY.

21

SPARK yolunu ve Py4j yolunu dışa aktararak çalışmaya başladı:

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

Dolayısıyla, Python kabuğunu her ateşlemek istediğinizde bunları yazmak istemiyorsanız, .bashrcdosyanıza eklemek isteyebilirsiniz.


1
Yüklememde libexec dizinini bulamıyorum Apache Spark, herhangi bir fikrim var mı?
Alberto Bonsanto

@AlbertoBonsanto Üzgünüm. Bu sorunla karşılaşmadım. Hiç fikrim yok :(
Dawny33

1
Evet, libexec klasörünü spark
1.5.2'de çıkardılar

1
@bluerubez kıvılcımla 1.6.2 orada gibi görünüyor ... Ayrıca emin neyi libexec/python/builddizin içindir, ama kıvılcım 1.6.2 o yok
OneCricketeer

17

Mac'te Spark'ı (formül "apache-spark") yüklemek için Homebrew kullanıyorum. Ardından, PYTHONPATH'ı bu şekilde ayarladım, böylece Python içe aktarımı çalışır:

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

Mac'inizdeki "1.2.0" ı gerçek apache-spark sürümüyle değiştirin.


14

Pyspark'ta bir Spark yürütmesi için iki bileşenin birlikte çalışması gerekir:

  • pyspark python paketi
  • JVM'de Spark örneği

Spark-submit veya pyspark ile bir şeyler başlatırken, bu komut dosyaları her ikisini de üstlenir, yani PYTHONPATH, PATH, vb. Ayarlarınızı yaparlar, böylece betiğiniz pyspark'ı bulabilir ve ayrıca parametrelerinize göre yapılandırarak spark örneğini başlatırlar. , örneğin --master X

Alternatif olarak, bu komut dosyalarını atlamak ve spark uygulamanızı doğrudan python yorumlayıcısında çalıştırmak mümkündür python myscript.py. Bu, özellikle kıvılcım betikleri daha karmaşık hale gelmeye başladığında ve sonunda kendi argümanlarını aldığında ilginçtir.

  1. Pyspark paketinin Python yorumlayıcısı tarafından bulunabileceğinden emin olun. Daha önce tartışıldığı gibi, spark / python dizinini PYTHONPATH'a ekleyin veya pip kurulumunu kullanarak doğrudan pyspark'ı kurun.
  2. Spark örneğinin parametrelerini betiğinizden ayarlayın (önceden pyspark'a geçirilenler).
    • Normalde --conf ile ayarladığınız kıvılcım yapılandırmaları için, bunlar SparkSession.builder.config içinde bir yapılandırma nesnesiyle (veya dize yapılandırmaları) tanımlanır.
    • Ana seçenekler için (--master veya --driver-mem gibi) şimdilik bunları PYSPARK_SUBMIT_ARGS ortam değişkenine yazarak ayarlayabilirsiniz. İşleri daha temiz ve daha güvenli hale getirmek için, onu Python'un içinden ayarlayabilirsiniz ve spark başlarken onu okuyacaktır.
  3. Sadece getOrCreate()oluşturucu nesnesinden aramanızı gerektiren örneği başlatın.

Bu nedenle senaryonuz şöyle bir şeye sahip olabilir:

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

Kurtulmak ImportError: No module named py4j.java_gatewayiçin aşağıdaki satırları eklemeniz gerekir:

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

Windows 10'da aşağıdakiler benim için çalıştı. Hesabınız için Ayarlar > Ortam değişkenlerini düzenle'yi kullanarak aşağıdaki ortam değişkenlerini ekledim :

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

("C: \ Programming \ ..." öğesini, spark'ı kurduğunuz klasöre değiştirin)


5

Linux kullanıcıları için, pyspark libaray'ı PYTHONPATH'a dahil etmenin doğru (ve kodlanmamış) yolu aşağıdadır. Her iki PATH bölümü de gereklidir:

  1. Pyspark Python modülünün kendisine giden yol ve
  2. Bu pyspark modülünün içe aktarıldığında bağlı olduğu sıkıştırılmış kitaplığın yolu

Aşağıda, sıkıştırılmış kitaplık sürümünün dinamik olarak belirlendiğine dikkat edin, bu nedenle onu sabit kodlamayız.

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

4

Cloudera yum paketlerinden kurulan CentOS VM'de bir kıvılcım kümesi çalıştırıyorum.

Pyspark'ı çalıştırmak için aşağıdaki değişkenleri ayarlamamız gerekiyordu.

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'

Bu, Anaconda dağıtımımı Spark ile kullanmak için yaptığım şeydi. Bu, Spark sürümünden bağımsızdır. İlk satırı kullanıcılarınızın python bölmesi olarak değiştirebilirsiniz. Ayrıca, Spark 2.2.0'dan itibaren PySpark, PyPi'de Bağımsız bir paket olarak mevcuttur, ancak henüz test etmedim.


4

Sen alabilirsiniz pyspark pathkullanarak python pip(PIP kullanarak pyspark yüklediyseniz) aşağıdaki gibi

pip show pyspark

3

Ben de aynı sorunu yaşadım.

Ayrıca doğru python sürümünü kullandığınızdan ve doğru pip sürümü ile yüklediğinizden emin olun. benim durumumda: hem python 2.7 hem de 3.x vardı. İle pyspark kurdum

pip2.7 pyspark'ı kurun

ve işe yaradı.


2

Bu hatayı aldım çünkü göndermeye çalıştığım python betiğine pyspark.py ( facepalm ) deniyordu . Düzeltme, PYTHONPATH'ımı yukarıda önerildiği gibi ayarlamak, ardından komut dosyasını pyspark_test.py olarak yeniden adlandırmak ve komut dosyalarıma göre oluşturulan pyspark.pyc dosyasını temizlemek ve bu hatayı temizlemekti.


2

DSE durumunda (DataStax Cassandra & Spark) PYTHONPATH'a aşağıdaki konumun eklenmesi gerekir

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

Ardından modülleri yoluna almak için dse pyspark'ı kullanın.

dse pyspark

2

Aynı sorunu yaşadım ve yukarıda önerilen çözümlere bir şey ekleyecektim. Spark'ı yüklemek için Mac OS X'te Homebrew kullanırken, yola libexec'i dahil etmek için py4j yol adresini düzeltmeniz gerekecektir (py4j sürümünü sahip olduğunuz sürümle değiştirmeyi hatırlayarak);

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

Not - Sıkıştırmayı açmayı denedim ve py4j yalnızca klasörü işe yaramadı. Zip dosyasını kullanın ...
El Dude

2

Benim durumumda farklı bir python dist_package (python 3.5) üzerine kurulurken ben python 3.6 kullanıyordum, bu yüzden aşağıdakiler yardımcı oldu:

python -m pip install pyspark

1

Ayrıca işletim sistemi olarak Alpine ile bir Docker konteyneri oluşturabilir ve Python ve Pyspark'ı paketler olarak kurabilirsiniz. Bu her şeyi konteyner haline getirecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.