web-dev-qa-db-fra.com

importer pyspark dans le shell python

Ceci est une copie de la question de quelqu'un d'autre sur un autre forum auquel on n'a jamais répondu, alors j'ai pensé la poser à nouveau ici, car j'ai le même problème. (Voir http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

J'ai Spark installé correctement sur ma machine et je peux exécuter des programmes python avec les modules pyspark sans erreur lors de l'utilisation de ./bin/pyspark comme interprète python. .

Cependant, lorsque j'essaie d'exécuter le shell Python normal, lorsque j'essaie d'importer des modules pyspark, le message d'erreur suivant s'affiche:

from pyspark import SparkContext

et il dit

"No module named pyspark".

Comment puis-je réparer cela? Y a-t-il une variable d'environnement que je dois définir pour pointer Python vers les en-têtes/bibliothèques/etc de pyspark? Si mon spark installation est/spark /, quels chemins pyspark dois-je inclure? Ou les programmes pyspark peuvent-ils uniquement être exécutés à partir de l'interpréteur pyspark?

100
Glenn Strycker

Il s'avère que la corbeille pyspark charge LOADING python et charge automatiquement les chemins de bibliothèque corrects. Découvrez $ SPARK_HOME/bin/pyspark:

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

J'ai ajouté cette ligne à mon fichier .bashrc et les modules sont maintenant correctement trouvés!

41
Glenn Strycker

Voici une méthode simple (Si vous ne vous souciez pas de la façon dont cela fonctionne !!!)

Utilisez findpark

  1. Allez dans votre shell python

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. importer les modules nécessaires

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. Terminé!!!

81
Suresh2692

Si cela affiche une telle erreur:

ImportError: Aucun module nommé py4j.Java_gateway

Veuillez ajouter $ SPARK_HOME/python/build à PYTHONPATH:

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

ne lancez pas votre fichier py en tant que: python filename.py à la place, utilisez: spark-submit filename.py

19
dodo

En exportant le chemin SPARK et le chemin Py4j, cela a commencé à fonctionner:

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

Donc, si vous ne voulez pas les taper à chaque fois que vous voulez lancer le shell Python, vous voudrez peut-être l'ajouter à votre fichier .bashrc

18
Dawny33

Sur Mac, j'utilise Homebrew pour installer Spark (formule "Apache-spark"). Ensuite, je règle PYTHONPATH de cette façon pour que l'importation Python fonctionne:

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

Remplacez le "1.2.0" par la version actuelle d’Apache-spark sur votre mac.

15
jyu

Pour une exécution Spark dans pyspark, deux composants doivent fonctionner ensemble:

  • pyspark python package
  • Instance Spark dans une machine virtuelle Java

Lors du lancement de choses avec spark-submit ou pyspark, ces scripts s’occupent des deux, c’est-à-dire qu’ils configurent votre PYTHONPATH, votre PATH, etc., de manière à ce que votre script puisse trouver pyspark et démarre également l’instance spark. , configuration en fonction de vos paramètres, par exemple --master X

Alternativement, il est possible de contourner ces scripts et d'exécuter votre application spark directement dans l'interpréteur python commepython myscript.py. Ceci est particulièrement intéressant lorsque spark les scripts commencent à devenir plus complexes et finissent par recevoir leurs propres arguments.

  1. Assurez-vous que le package pyspark peut être trouvé par l'interpréteur Python. Comme indiqué précédemment, ajoutez le répertoire spark/python à PYTHONPATH ou installez directement pyspark à l'aide de pip install.
  2. Définissez les paramètres de spark instance à partir de votre script (ceux qui étaient passés à pyspark).
    • Pour les configurations spark que vous auriez normalement définies avec --conf, elles sont définies avec un objet de configuration (ou des configurations de chaîne) dans SparkSession.builder.config.
    • Pour les principales options (telles que --master ou --driver-mem), vous pouvez les définir en écrivant dans la variable d’environnement PYSPARK_SUBMIT_ARGS. Pour rendre les choses plus propres et plus sûres, vous pouvez le définir depuis Python lui-même, et spark le lira au démarrage.
  3. Démarrez l'instance, ce qui nécessite simplement d'appeler getOrCreate() à partir de l'objet générateur.

Votre script peut donc avoir quelque chose comme ça:

from pyspark.sql import SparkSession

if __== "__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())
12
F Pereira

Pour vous débarrasser de ImportError: No module named py4j.Java_gateway, vous devez ajouter les lignes suivantes:

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
Karang

Sous Windows 10, ce qui suit a fonctionné pour moi. J'ai ajouté les variables d'environnement suivantes à l'aide de Paramètres> Modifier les variables d'environnement de votre compte:

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

(remplacez "C:\Programming\..." par le dossier dans lequel vous avez installé spark)

5
JustAC0der

Pour les utilisateurs de Linux, voici la manière correcte (et non codée en dur) d’inclure pyspark libaray dans PYTHONPATH. Les deux parties de PATH sont nécessaires:

  1. Le chemin d'accès au module pyspark Python lui-même, et
  2. Le chemin d'accès à la bibliothèque zippée sur laquelle repose le module pyspark lors de l'importation

Notez ci-dessous que la version de la bibliothèque compressée est déterminée dynamiquement, nous ne la codons donc pas en dur.

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

J'ai eu le même problème.

Assurez-vous également que vous utilisez la bonne version python et que vous l'installez avec la bonne version de pip. dans mon cas: j’avais python 2.7 et 3.x. J'ai installé pyspark avec

pip2.7 installer pyspark

et cela a fonctionné.

2
etinika
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

C’est ce que j’ai fait pour utiliser ma distribution Anaconda avec Spark. Ceci est Spark indépendant de la version. Vous pouvez modifier la première ligne en python bin de vos utilisateurs. En outre, à partir de Spark 2.2.0, PySpark est disponible sous forme de package autonome sur PyPi, mais je n’ai pas encore testé.

2
Yayati Sule

J'exécute un cluster spark sur la machine virtuelle CentOS, qui est installé à partir de packages cloudera yum.

J'ai dû définir les variables suivantes pour exécuter pyspark.

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
2
sujesh chirackkal

Dans le cas de DSE (DataStax Cassandra & Spark), l'emplacement suivant doit être ajouté à PYTHONPATH.

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

Ensuite, utilisez le dse pyspark pour obtenir les modules dans le chemin.

dse pyspark
1
Sreesankar

Vous pouvez obtenir le pyspark path dans python en utilisant pip (si vous avez installé pyspark en utilisant PIP) comme ci-dessous

pip show pyspark
1
user3524049

Vous pouvez également créer un conteneur Docker avec Alpine comme système d'exploitation et l'installation Python et Pyspark comme des packages. Cela aura tout conteneurisé.

1
Eddy

J'ai eu cette erreur parce que le script python que je tentais de soumettre s'appelait pyspark.py (facepalm). Le correctif était de définir mon PYTHONPATH comme recommandé ci-dessus, puis de renommer le script pyspark_test.py et de nettoyer le pyspark.pyc créé en fonction du nom d'origine de mon script et d'effacer cette erreur.

1
Patrick

J'ai eu le même problème et ajouterais une chose aux solutions proposées ci-dessus. Lorsque vous utilisez Homebrew sous Mac OS X pour installer Spark, vous devez corriger l'adresse du chemin py4j afin d'inclure libexec dans le chemin (n'oubliez pas de changer la version de py4j pour celle que vous avez déjà);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
1
tjb305

Dans mon cas, il s’agissait d’une installation différente python dist_package (python 3.5) alors que j’utilisais python 3.6;

python -m pip install pyspark
0
D Untouchable