web-dev-qa-db-fra.com

Pourquoi PySpark ne trouve-t-il pas py4j.Java_gateway?

J'ai installé Spark, dirigé l'assembly sbt et je peux ouvrir bin/pyspark sans problème. Cependant, je rencontre des problèmes pour charger le module pyspark dans ipython. Je reçois l'erreur suivante:

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
42
user592419

Dans mon environnement (en utilisant docker et l’image sequenceiq/spark: 1.1.0-ubuntu), j’ai couru dedans. Si vous regardez le script Shell de pyspark, vous verrez que quelques éléments doivent être ajoutés à votre PYTHONPATH:

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

Cela a fonctionné dans ipython pour moi.

Mise à jour: comme indiqué dans les commentaires, le nom du fichier Zip py4j change avec chaque version Spark, alors cherchez le bon nom.

63
nealmcb

J'ai résolu ce problème en ajoutant des chemins dans .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

Après cela, il ne soulève jamais ImportError: Aucun module nommé py4j.Java_gateway.

25
Anderson

Dans Pycharm, avant d'exécuter le script ci-dessus, assurez-vous d'avoir décompressé le fichier py4j * .Zip. et ajoutez sa référence dans le script sys.path.append ("path to spark */python/lib")

Cela a fonctionné pour moi.

4
shubham gorde
#/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)
4
shubham gorde

Installez le module de pip 'py4j'.

pip install py4j

J'ai eu ce problème avec Spark 2.1.1 et Python 2.7.x. Pas sûr si Spark a cessé de regrouper ce paquet dans les dernières distributions, mais installer py4j module a résolu le problème pour moi.

4
kn_pavan