2014-10-23 17 views
37

Tôi đã cài đặt Spark, chạy sbt assembly và có thể mở bin/pyspark mà không gặp vấn đề gì. Tuy nhiên, tôi đang gặp sự cố khi tải mô-đun pyspark vào ipython. Tôi nhận được lỗi sau:Tại sao PySpark không thể tìm thấy py4j.java_gateway?

In [1]: import pyspark 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-c15ae3402d12> in <module>() 
----> 1 import pyspark 

/usr/local/spark/python/pyspark/__init__.py in <module>() 
    61 
    62 from pyspark.conf import SparkConf 
---> 63 from pyspark.context import SparkContext 
    64 from pyspark.sql import SQLContext 
    65 from pyspark.rdd import RDD 

/usr/local/spark/python/pyspark/context.py in <module>() 
    28 from pyspark.conf import SparkConf 
    29 from pyspark.files import SparkFiles 
---> 30 from pyspark.java_gateway import launch_gateway 
    31 from pyspark.serializers import PickleSerializer, BatchedSerializer, UTF8Deserializer, \ 
    32  PairDeserializer, CompressedSerializer 

/usr/local/spark/python/pyspark/java_gateway.py in <module>() 
    24 from subprocess import Popen, PIPE 
    25 from threading import Thread 
---> 26 from py4j.java_gateway import java_import, JavaGateway, GatewayClient 
    27 
    28 

ImportError: No module named py4j.java_gateway 
+1

Tôi không biết đây có phải là câu trả lời thực sự hay không, nhưng 'sudo pip install py4j' đã khắc phục sự cố này cho tôi. Tôi cho rằng lỗi này xuất hiện sau khi bạn đã thêm SPARK_HOME vào PYTHON_PATH? – emmagras

+0

Tôi đã cung cấp câu trả lời cho vấn đề này (hoặc vấn đề tương tự ở đây). Tôi có thể hữu ích cho bạn: http://stackoverflow.com/questions/24249847/running-pyspark-on-and-ide-like-spyder/28380155#28380155 –

+0

Tôi cũng đặt 'PYTHONPATH' để trỏ đến tất cả các python cần thiết phụ thuộc nhưng có cùng lỗi. Để giải quyết vấn đề này, tôi cũng phải 1) cài đặt một bản sao của py4j tại thư mục 'site-packages', nơi các gói python thông thường được cài đặt 2) thay đổi sự cho phép của mọi thứ trong thư mục py4j để các nút thực thi YARN có thể đọc/thi hành các tệp có liên quan. – karenyng

Trả lời

54

Trong môi trường của tôi (sử dụng docker và chuỗi hình ảnh/spark: 1.1.0-ubuntu), tôi đã thực hiện việc này. Nếu bạn nhìn vào kịch bản pyspark vỏ, bạn sẽ thấy rằng bạn cần một vài điều bổ sung vào PYTHONPATH của bạn:

export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 

Đó làm việc trong ipython cho tôi.

Cập nhật: như đã lưu ý trong nhận xét, tên của tệp zip py4j thay đổi với mỗi bản phát hành Spark, vì vậy, hãy nhìn xung quanh để biết tên đúng.

+8

Đó là 'xuất PYTHONPATH = $ SPARK_HOME/python/lib/py4j-0.9-src.zip: $ PYTHONPATH' trong Spark 1.6.0 –

+2

Tên của tệp zip py4j thay đổi với mọi phiên bản Spark, vì vậy hãy đảm bảo tệp zip của bạn đang trỏ đến trong '$ PYTHONPATH' thực sự tồn tại. –

18

tôi giải quyết vấn đề này bằng cách thêm một số đường dẫn trong .bashrc

export SPARK_HOME=/home/a141890/apps/spark 
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 

Sau đó, nó không bao giờ nâng ImportError: Không có mô-đun tên py4j.java_gateway.

+0

Tôi cũng phải đối mặt với cùng một vấn đề. Tôi nên viết các báo cáo xuất khẩu này ở đâu? Tôi đã thử trong nhắc lệnh cmd và sổ ghi chép ipython. Nó không làm việc cho tôi ở một trong số chúng – SRS

+0

Tôi thiết lập đường dẫn tia lửa, đường dẫn python 2,7 và đường dẫn tệp py4j zip làm đường dẫn biến môi trường hệ thống. Tôi không thể giải quyết vấn đề. Khi tôi chạy ** từ pyspar nhập khẩu SparkContext ** Tôi nhận được lỗi. – SRS

3

Trong Pycharm, trước khi chạy tập lệnh ở trên, hãy đảm bảo rằng bạn đã giải nén tệp py4j * .zip. và thêm tham chiếu của nó trong tập lệnh sys.path.append ("đường dẫn đến tia lửa */python/lib")

Nó làm việc cho tôi.

3
#/home/shubham/spark-1.6.2 
import os 
import sys 
# Set the path for spark installation 
# this is the path where you have built spark using sbt/sbt assembly 
os.environ['SPARK_HOME'] = "/home/shubham/spark-1.6.2" 
# os.environ['SPARK_HOME'] = "/home/jie/d2/spark-0.9.1" 
# Append to PYTHONPATH so that pyspark could be found 
sys.path.append("/home/shubham/spark-1.6.2/python") 
sys.path.append("/home/shubham/spark-1.6.2/python/lib") 
# sys.path.append("/home/jie/d2/spark-0.9.1/python") 
# Now we are ready to import Spark Modules 
try: 
    from pyspark import SparkContext 
    from pyspark import SparkConf`enter code here` 
    print "Hey nice" 
except ImportError as e: 
    print ("Error importing Spark Modules", e) 
sys.exit(1) 
2

Cài đặt mô-đun pip 'py4j'.

pip install py4j

Tôi có vấn đề này với Spark 2.1.1 và Python 2.7.x. Bạn không chắc chắn nếu Spark ngừng gói này trong các bản phân phối mới nhất. Nhưng cài đặt mô-đun py4j giải quyết được vấn đề cho tôi.

Các vấn đề liên quan