mengimpor pyspark di shell python

111

Ini adalah salinan pertanyaan orang lain di forum lain yang tidak pernah dijawab, jadi saya pikir saya akan menanyakannya kembali di sini, karena saya memiliki masalah yang sama. (Lihat http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

Saya telah menginstal Spark dengan benar di mesin saya dan saya dapat menjalankan program python dengan modul pyspark tanpa kesalahan saat menggunakan ./bin/pyspark sebagai penerjemah python saya.

Namun, ketika saya mencoba menjalankan shell Python biasa, ketika saya mencoba mengimpor modul pyspark, saya mendapatkan kesalahan ini:

from pyspark import SparkContext

dan tertulis

"No module named pyspark".

Bagaimana cara memperbaikinya? Apakah ada variabel lingkungan yang perlu saya setel untuk mengarahkan Python ke pyspark headers / libraries / etc.? Jika instalasi percikan saya adalah / spark /, jalur pyspark mana yang perlu saya sertakan? Atau dapatkah program pyspark hanya dijalankan dari juru bahasa pyspark?

Glenn Strycker
sumber
Mereka mengatakan bahwa mengubah variabel lingkungan "tidak terlalu efektif, karena diganti dengan sangat cepat oleh bin / spark-submit". Mungkin Anda bisa belajar sesuatu dari pertukaran ini
emmagras

Jawaban:

97

Berikut adalah metode sederhana (Jika Anda tidak peduli tentang cara kerjanya !!!)

Gunakan findspark

  1. Pergi ke shell python Anda

    pip install findspark
    
    import findspark
    findspark.init()
  2. impor modul yang diperlukan

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

Suresh2692
sumber
Solusi lain tidak berhasil untuk saya. Saya menggunakan findspark untuk saat ini dalam program saya. Sepertinya solusi yang layak untuk masalah ini.
Biksu Analitis
Saya lebih suka tidak perlu melakukan ini .. tapi hei .. mengingat tidak ada lagi yang berhasil .. Saya akan menerimanya.
javadba
51

Jika mencetak kesalahan seperti itu:

ImportError: Tidak ada modul bernama py4j.java_gateway

Silakan tambahkan $ SPARK_HOME / python / build ke PYTHONPATH:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
Peng Zhang 1516540
sumber
9
Seperti dijelaskan dalam respons lain stackoverflow.com/questions/26533169/… Saya harus menambahkan ekspor berikut PYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip: $ PYTHONPATH
meyerson
46

Ternyata pyspark bin sedang MEMUAT python dan secara otomatis memuat jalur perpustakaan yang benar. Lihat $ SPARK_HOME / bin / pyspark:

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

Saya menambahkan baris ini ke file .bashrc saya dan modul sekarang ditemukan dengan benar!

Glenn Strycker
sumber
1
Selain langkah ini, saya juga perlu menambahkan export SPARK_HOME=~/dev/spark-1.1.0:, go figure. Nama lipat Anda mungkin berbeda.
emmagras
21

jangan menjalankan file py Anda sebagai: sebagai python filename.py gantinya gunakan:spark-submit filename.py

dodo
sumber
Dapatkah seseorang menjelaskan mengapa tidak melakukan ini? Saya telah melihat pertanyaan ini tetapi sejauh ini belum dapat menemukan apa pun yang menjelaskan mengapa demikian.
Mint
@Mint Jawaban lain menunjukkan mengapa; paket pyspark tidak disertakan dalam $ PYTHONPATH secara default, sehingga import pysparkakan gagal pada baris perintah atau dalam skrip yang dieksekusi. Anda harus: menjalankan pyspark melalui spark-submit sebagaimana dimaksud atau b. tambahkan $ SPARK_HOME / python ke $ PYTHONPATH.
kingledion
Poin lain adalah spark-submit adalah skrip shell, yang membantu Anda mengkonfigurasi lingkungan sistem dengan benar sebelum menggunakan spark, jika Anda hanya melakukan python main.py Anda perlu mengkonfigurasi lingkungan sistem dengan benar misalnya PYTHONPATH, SPARK_HOME
E.ZY.
21

Dengan mengekspor jalur SPARK dan jalur Py4j, itu mulai berfungsi:

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

Jadi, jika Anda tidak ingin mengetik ini setiap kali Anda ingin menjalankan shell Python, Anda mungkin ingin menambahkannya ke .bashrcfile Anda .

Dawny33
sumber
1
Saya tidak dapat menemukan direktori libexec dalam Apache Sparkinstalasi saya , tahu?
Alberto Bonsanto
@Albertoanto Maaf. Saya belum menghadapi masalah ini. Jadi, tidak tahu :(
Dawny33
1
Ya, mereka mengeluarkan folder
libexec
1
@bluerubez Sepertinya ada di spark 1.6.2 ... Juga, tidak yakin untuk apa libexec/python/builddirektori itu, tetapi spark 1.6.2 tidak memilikinya
OneCricketeer
17

Di Mac, saya menggunakan Homebrew untuk menginstal Spark (rumus "apache-spark"). Kemudian, saya mengatur PYTHONPATH dengan cara ini sehingga impor Python berfungsi:

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

Ganti "1.2.0" dengan versi apache-spark yang sebenarnya di mac Anda.

jyu
sumber
14

Untuk eksekusi Spark di pyspark, dua komponen diperlukan untuk bekerja bersama:

  • pyspark paket python
  • Instance percikan dalam JVM

Saat meluncurkan sesuatu dengan spark-submit atau pyspark, skrip ini akan mengurus keduanya, yaitu mereka mengatur PYTHONPATH, PATH, dll. Anda, sehingga skrip Anda dapat menemukan pyspark, dan mereka juga memulai contoh percikan, mengonfigurasi sesuai dengan parameter Anda , misalnya --master X

Alternatifnya, dimungkinkan untuk melewati skrip ini dan menjalankan aplikasi spark Anda langsung di interpreter python seperti python myscript.py. Ini sangat menarik ketika skrip percikan mulai menjadi lebih kompleks dan akhirnya menerima argumennya sendiri.

  1. Pastikan paket pyspark dapat ditemukan oleh penerjemah Python. Seperti yang sudah dibahas, tambahkan dir spark / python ke PYTHONPATH atau langsung instal pyspark menggunakan pip install.
  2. Tetapkan parameter contoh percikan dari skrip Anda (yang dulu diteruskan ke pyspark).
    • Untuk konfigurasi spark seperti yang biasanya Anda setel dengan --conf, konfigurasi tersebut ditentukan dengan objek config (atau konfigurasi string) di SparkSession.builder.config
    • Untuk opsi utama (seperti --master, atau --driver-mem) saat ini Anda dapat menyetelnya dengan menulis ke variabel lingkungan PYSPARK_SUBMIT_ARGS. Untuk membuat segalanya lebih bersih dan aman, Anda dapat mengaturnya dari dalam Python itu sendiri, dan spark akan membacanya saat memulai.
  3. Mulai instance, yang hanya mengharuskan Anda memanggil getOrCreate()dari objek pembangun.

Karena itu, skrip Anda dapat memiliki sesuatu seperti ini:

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())
F Pereira
sumber
9

Untuk menghilangkan ImportError: No module named py4j.java_gateway, Anda perlu menambahkan baris berikut:

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)
Karang
sumber
7

Di Windows 10, berikut ini berfungsi untuk saya. Saya menambahkan variabel lingkungan berikut menggunakan Pengaturan > Edit variabel lingkungan untuk akun Anda :

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

(ubah "C: \ Programming \ ..." ke folder tempat Anda menginstal spark)

JustAC0der
sumber
5

Untuk pengguna Linux, berikut ini adalah cara yang benar (dan non-hard-coded) untuk memasukkan pyspark libaray di PYTHONPATH. Kedua bagian PATH diperlukan:

  1. Jalur ke modul pyspark Python itu sendiri, dan
  2. Jalur ke pustaka zip yang bergantung pada modul pyspark saat diimpor

Perhatikan di bawah ini bahwa versi pustaka zip ditentukan secara dinamis, jadi kami tidak melakukan hard-code.

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

Saya menjalankan spark cluster, di CentOS VM, yang diinstal dari paket cloudera yum.

Harus mengatur variabel berikut untuk menjalankan pyspark.

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
sujesh chirackkal
sumber
4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

Inilah yang saya lakukan untuk menggunakan distribusi Anaconda saya dengan Spark. Ini adalah versi Spark independen. Anda dapat mengubah baris pertama ke bin python pengguna Anda. Juga, mulai Spark 2.2.0 PySpark tersedia sebagai paket yang berdiri sendiri di PyPi tetapi saya belum mengujinya.

Yayati Sule
sumber
4

Anda bisa mendapatkan pyspark pathdi python menggunakan pip(jika Anda telah menginstal pyspark menggunakan PIP) seperti di bawah ini

pip show pyspark
pengguna3524049
sumber
3

Saya memiliki masalah yang sama.

Juga pastikan Anda menggunakan versi python yang benar dan Anda menginstalnya dengan versi pip yang benar. dalam kasus saya: Saya memiliki python 2.7 dan 3.x. Saya telah menginstal pyspark dengan

pip2.7 menginstal pyspark

dan itu berhasil.

etinika
sumber
2

Saya mendapat kesalahan ini karena skrip python yang saya coba kirimkan disebut pyspark.py ( facepalm ). Perbaikannya adalah mengatur PYTHONPATH saya seperti yang disarankan di atas, kemudian mengganti nama skrip menjadi pyspark_test.py dan membersihkan pyspark.pyc yang dibuat berdasarkan nama asli skrip saya dan itu menghapus kesalahan ini.

Patrick
sumber
2

Dalam kasus DSE (DataStax Cassandra & Spark), lokasi berikut perlu ditambahkan ke PYTHONPATH

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

Kemudian gunakan dse pyspark untuk mendapatkan modul di jalur.

dse pyspark
Sreesankar
sumber
2

Saya memiliki masalah yang sama dan akan menambahkan satu hal ke solusi yang diusulkan di atas. Saat menggunakan Homebrew di Mac OS X untuk menginstal Spark, Anda harus memperbaiki alamat jalur py4j untuk menyertakan libexec di jalur (ingat untuk mengubah versi py4j ke versi yang Anda miliki);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH
tjb305.dll
sumber
Catatan - Saya mencoba membuka ritsletingnya dan menggunakan py4jfoldernya saja, tidak berhasil. Gunakan file zip ...
El Dude
2

Dalam kasus saya itu mendapatkan instalasi di dist_package python yang berbeda (python 3.5) sedangkan saya menggunakan python 3.6, jadi yang di bawah ini membantu:

python -m pip install pyspark
D Tak tersentuh
sumber
1

Anda juga dapat membuat kontainer Docker dengan Alpine sebagai OS dan menginstal Python dan Pyspark sebagai paket. Itu akan membuat semuanya dalam kontainer.

Eddy
sumber