nhập pyspark trong vỏ trăn


111

Đây là bản sao câu hỏi của người khác trên một diễn đàn khác mà chưa bao giờ được trả lời, vì vậy tôi nghĩ tôi nên hỏi lại nó ở đây, vì tôi có cùng một vấn đề. (Xem http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

Tôi đã cài đặt Spark đúng cách trên máy của mình và có thể chạy các chương trình python với mô-đun pyspark mà không gặp lỗi khi sử dụng ./bin/pyspark làm trình thông dịch python của tôi.

Tuy nhiên, khi tôi cố gắng chạy trình bao Python thông thường, khi tôi cố gắng nhập mô-đun pyspark, tôi gặp lỗi này:

from pyspark import SparkContext

và nó nói

"No module named pyspark".

Làm thế nào tôi có thể sửa lỗi này? Có biến môi trường nào mà tôi cần đặt để trỏ Python tới tiêu đề pyspark / thư viện / v.v. không? Nếu cài đặt spark của tôi là / spark /, tôi cần bao gồm những đường dẫn pyspark nào? Hay các chương trình pyspark chỉ có thể chạy từ trình thông dịch pyspark?


Họ nói rằng việc thay đổi các biến môi trường là "không hiệu quả lắm, vì nó bị bin / spark-submit ghi đè rất nhanh." Có lẽ bạn có thể học được điều gì đó từ cuộc trao đổi này
emmagras

Câu trả lời:


97

Đây là một phương pháp đơn giản (Nếu bạn không bận tâm về cách nó hoạt động !!!)

Sử dụng findspark

  1. Đi tới vỏ trăn của bạn

    pip install findspark
    
    import findspark
    findspark.init()
  2. nhập các mô-đun cần thiết

    from pyspark import SparkContext
    from pyspark import SparkConf
  3. Làm xong!!!


Các giải pháp khác không hiệu quả với tôi. Tôi hiện đang sử dụng findspark trong chương trình của mình. Có vẻ như một cách giải quyết tốt cho vấn đề.
Analytical Monk

Tôi thà không cần phải làm điều này .. nhưng hey .. cho không có gì tác phẩm khác .. Tôi sẽ lấy nó.
javadba

51

Nếu nó in lỗi như vậy:

ImportError: Không có mô-đun nào có tên py4j.java_gateway

Vui lòng thêm $ SPARK_HOME / python / build vào 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
Như được mô tả trong một phản hồi khác stackoverflow.com/questions/26533169/… Tôi đã phải thêm lần xuất sau PYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip: $ PYTHONPATH
meyerson

46

Hóa ra thùng pyspark đang TẢI python và tự động tải các đường dẫn thư viện chính xác. Kiểm tra $ SPARK_HOME / bin / pyspark:

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

Tôi đã thêm dòng này vào tệp .bashrc của mình và các mô-đun hiện đã được tìm thấy chính xác!


1
Ngoài bước này, tôi cũng cần thêm : export SPARK_HOME=~/dev/spark-1.1.0, go figure. Tên thư mục của bạn có thể khác nhau.
emmagras

21

không chạy tệp py của bạn dưới dạng: python filename.py thay vào đó hãy sử dụng:spark-submit filename.py


Ai đó có thể mở rộng về lý do tại sao không làm điều này? Tôi đã xem xét câu hỏi này nhưng cho đến nay vẫn chưa thể tìm thấy bất kỳ điều gì giải thích tại sao lại như vậy.
Mint

@Mint Các câu trả lời khác cho thấy lý do tại sao; gói pyspark không được bao gồm trong $ PYTHONPATH theo mặc định, do đó, một import pysparksẽ không thành công tại dòng lệnh hoặc trong một tập lệnh được thực thi. Bạn phải a. chạy pyspark thông qua spark-submit như dự định hoặc b. thêm $ SPARK_HOME / python vào $ PYTHONPATH.
kingledion

Một điểm khác là spark-submit là một shell script, giúp bạn định cấu hình môi trường hệ thống một cách chính xác trước khi sử dụng spark, nếu bạn chỉ làm python main.py bạn cần phải định cấu hình môi trường hệ thống chính xác, ví dụ PYTHONPATH, SPARK_HOME
E.ZY.

21

Bằng cách xuất đường dẫn SPARK và đường dẫn Py4j, nó bắt đầu hoạt động:

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

Vì vậy, nếu bạn không muốn nhập những thứ này mỗi khi bạn muốn kích hoạt trình bao Python, bạn có thể muốn thêm nó vào .bashrctệp của mình


1
Tôi không thể tìm thấy thư mục libexec trong Apache Sparkcài đặt của mình , có ý kiến ​​gì không?
Alberto Bonsanto

@AlbertoBonsanto Xin lỗi. Tôi đã không đối mặt với vấn đề này. Vì vậy, không có ý kiến ​​:(
Dawny33

1
Vâng họ lấy ra thư mục libexec trong spark 1.5.2
bluerubez

1
@bluerubez Dường như có mặt ở đó trong spark 1.6.2 ... Ngoài ra, không chắc chắn những gì các libexec/python/buildthư mục là cho, nhưng tia lửa 1.6.2 không có mà
OneCricketeer

17

Trên Mac, tôi sử dụng Homebrew để cài đặt Spark (công thức "apache-spark"). Sau đó, tôi đặt PYTHONPATH theo cách này để quá trình nhập Python hoạt động:

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

Thay thế "1.2.0" bằng phiên bản apache-spark thực trên máy mac của bạn.


14

Để thực thi Spark trong pyspark, hai thành phần bắt buộc phải hoạt động cùng nhau:

  • pyspark gói trăn
  • Phiên bản Spark trong JVM

Khi khởi chạy mọi thứ bằng spark-submit hoặc pyspark, các tập lệnh này sẽ đảm nhiệm cả hai, tức là chúng thiết lập PYTHONPATH, PATH, v.v. của bạn, để tập lệnh của bạn có thể tìm thấy pyspark và chúng cũng khởi động phiên bản spark, định cấu hình theo các thông số của bạn , ví dụ --master X

Ngoài ra, có thể bỏ qua các tập lệnh này và chạy ứng dụng spark của bạn trực tiếp trong trình thông dịch python như thế nào python myscript.py. Điều này đặc biệt thú vị khi các tập lệnh spark bắt đầu trở nên phức tạp hơn và cuối cùng nhận được các args của riêng chúng.

  1. Đảm bảo rằng trình thông dịch Python có thể tìm thấy gói pyspark. Như đã thảo luận, hãy thêm spark / python dir vào PYTHONPATH hoặc cài đặt trực tiếp pyspark bằng cách sử dụng pip install.
  2. Đặt các tham số của phiên bản spark từ tập lệnh của bạn (những tham số đã từng được chuyển cho pyspark).
    • Đối với các cấu hình tia lửa như bạn thường đặt với --conf, chúng được xác định bằng một đối tượng cấu hình (hoặc cấu hình chuỗi) trong SparkSession.builder.config
    • Đối với các tùy chọn chính (như --master hoặc --driver-mem), bạn có thể đặt chúng bằng cách ghi vào biến môi trường PYSPARK_SUBMIT_ARGS. Để làm cho mọi thứ sạch sẽ và an toàn hơn, bạn có thể đặt nó từ bên trong Python và tia lửa sẽ đọc nó khi bắt đầu.
  3. Bắt đầu phiên bản, chỉ yêu cầu bạn gọi getOrCreate()từ đối tượng trình tạo.

Do đó, script của bạn có thể có một cái gì đó như thế này:

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

Để loại bỏ ImportError: No module named py4j.java_gateway, bạn cần thêm các dòng sau:

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

Trên Windows 10, điều sau đây phù hợp với tôi. Tôi đã thêm các biến môi trường sau bằng Cài đặt > Chỉnh sửa biến môi trường cho tài khoản của bạn :

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

(thay đổi "C: \ Programming \ ..." thành thư mục mà bạn đã cài đặt spark)


5

Đối với người dùng Linux, sau đây là cách chính xác (và không được mã hóa cứng) để bao gồm pyspark libaray trong PYTHONPATH. Cả hai phần PATH đều cần thiết:

  1. Đường dẫn đến chính mô-đun Python pyspark và
  2. Đường dẫn đến thư viện đã nén mà mô-đun pyspark đó dựa vào khi nhập

Lưu ý bên dưới rằng phiên bản thư viện nén được xác định động, vì vậy chúng tôi không mã hóa nó.

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

4

Tôi đang chạy một cụm tia lửa, trên CentOS VM, được cài đặt từ các gói cloudera yum.

Phải đặt các biến sau để chạy 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'

Đây là những gì tôi đã làm khi sử dụng bản phân phối Anaconda của mình với Spark. Đây là phiên bản Spark độc lập. Bạn có thể thay đổi dòng đầu tiên thành thùng python của người dùng. Ngoài ra, kể từ Spark 2.2.0 PySpark có sẵn dưới dạng gói Độc lập trên PyPi nhưng tôi vẫn chưa thử nghiệm.


4

Bạn có thể lấy pyspark pathtrong python bằng cách sử dụng pip(nếu bạn đã cài đặt pyspark bằng PIP) như bên dưới

pip show pyspark

3

Tôi đã từng gặp vấn đề tương tự.

Ngoài ra, hãy đảm bảo rằng bạn đang sử dụng đúng phiên bản python và bạn đang cài đặt nó với phiên bản pip phù hợp. trong trường hợp của tôi: Tôi đã có cả python 2.7 và 3.x. Tôi đã cài đặt pyspark với

pip2.7 cài đặt pyspark

va no đa hoạt động.


2

Tôi gặp lỗi này vì tập lệnh python mà tôi đang cố gửi có tên là pyspark.py ( facepalm ). Cách khắc phục là đặt PYTHONPATH của tôi như được đề xuất ở trên, sau đó đổi tên tập lệnh thành pyspark_test.py và xóa pyspark.pyc được tạo dựa trên tên gốc của tập lệnh của tôi và điều đó đã xóa lỗi này.


2

Trong trường hợp DSE (DataStax Cassandra & Spark), cần thêm vị trí sau vào PYTHONPATH

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

Sau đó, sử dụng dse pyspark để lấy các mô-đun trong đường dẫn.

dse pyspark

2

Tôi đã gặp vấn đề tương tự và sẽ thêm một điều vào các giải pháp được đề xuất ở trên. Khi sử dụng Homebrew trên Mac OS X để cài đặt Spark, bạn sẽ cần sửa địa chỉ đường dẫn py4j để bao gồm libexec trong đường dẫn (hãy nhớ thay đổi phiên bản py4j thành phiên bản bạn có);

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

Lưu ý - Tôi đã thử giải nén nó và chỉ sử dụng py4jthư mục, không hoạt động. Sử dụng tệp zip ...
El Dude

2

Trong trường hợp của tôi, nó đang được cài đặt ở một dist_package python khác (python 3.5) trong khi tôi đang sử dụng python 3.6, vì vậy những điều dưới đây đã giúp:

python -m pip install pyspark

1

Bạn cũng có thể tạo vùng chứa Docker với Alpine làm Hệ điều hành và cài đặt Python và Pyspark dưới dạng các gói. Điều đó sẽ có tất cả mọi thứ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.