web-dev-qa-db-fra.com

variables d'environnement PYSPARK_PYTHON et PYSPARK_DRIVER_PYTHON

J'ai installé pyspark récemment. Il a été installé correctement. Lorsque j'utilise un programme simple suivant en python, j'obtiens une erreur.

>>from pyspark import SparkContext
>>sc = SparkContext()
>>data = range(1,1000)
>>rdd = sc.parallelize(data)
>>rdd.collect()

lors de l'exécution de la dernière ligne, je reçois une erreur dont la ligne clé semble être

[Stage 0:>                                                          (0 + 0) / 4]18/01/15 14:36:32 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 1)
org.Apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/pyspark/python/lib/pyspark.Zip/pyspark/worker.py", line 123, in main
    ("%d.%d" % sys.version_info[:2], version))
Exception: Python in worker has different version 2.7 than that in driver 3.5, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.

J'ai les variables suivantes dans .bashrc

export SPARK_HOME=/opt/spark
export PYTHONPATH=$SPARK_HOME/python3

J'utilise Python 3.

7
Akash Kumar

Par ailleurs, si vous utilisez PyCharm, vous pouvez ajouter PYSPARK_PYTHON et PYSPARK_DRIVER_PYTHON pour exécuter/déboguer les configurations par image ci-dessous enter image description here

8
buxizhizhoum

Vous devez définir les variables d'environnement suivantes dans $SPARK_HOME/conf/spark-env.sh:

export PYSPARK_PYTHON=/usr/bin/python
export PYSPARK_DRIVER_PYTHON=/usr/bin/python

Si spark-env.sh n'existe pas, vous pouvez renommer spark-env.sh.template

7
Alex

Apache-Spark 2.4.3 sur Archlinux

Je viens d'installer Apache-Spark-2.3.4 de site Web Apache-Spark , j'utilise distribution Archlinux , c'est une distribution simple et légère. J'ai donc installé et mis le Apache-spark répertoire sur /opt/Apache-spark/, maintenant il est temps d'exporter nos variables d'environnement, rappelez-vous, j'utilise Archlinux, alors pensez à utiliser votre $Java_HOME par exemple.

Importation de variables d'environnement

echo 'export Java_HOME=/usr/lib/jvm/Java-7-openjdk/jre' >> /home/user/.bashrc
echo 'export SPARK_HOME=/opt/Apache-spark'  >> /home/user/.bashrc
echo 'export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH'  >> /home/user/.bashrc
echo 'export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.Zip:$PYTHONPATH'  >> /home/user/.bashrc
source ../.bashrc 

Essai

emanuel@hinton ~ $ echo 'export Java_HOME=/usr/lib/jvm/Java-7-openjdk/jre' >> /home/emanuel/.bashrc
emanuel@hinton ~ $ echo 'export SPARK_HOME=/opt/Apache-spark'  >> /home/emanuel/.bashrc
emanuel@hinton ~ $ echo 'export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH'  >> /home/emanuel/.bashrc
emanuel@hinton ~ $ echo 'export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.Zip:$PYTHONPATH'  >> /home/emanuel/.bashrc
emanuel@hinton ~ $ source .bashrc 
emanuel@hinton ~ $ python
Python 3.7.3 (default, Jun 24 2019, 04:54:02) 
[GCC 9.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyspark
>>> 

Tout fonctionne correctement puisque vous avez correctement importé les variables d'environnement pour SparkContext.

Utilisation d'Apache-Spark sur Archlinux via DockerImage

Pour mes besoins, j'ai créé une image Docker avec python, jupyter-notebook et Apache-spark-2.3.4

exécuter l'image

docker run -ti -p 8888:8888 emanuelfontelles/spark-jupyter

allez simplement dans votre navigateur et tapez

http://localhost:8888/tree

et demandera une page d'authentification, reviendra au terminal et copiera le numéro de jeton et le tour est joué, le conteneur Archlinux exécutera une distribution Apache-Spark.

0
Emanuel Fontelles

Exécutez simplement le code ci-dessous au tout début de votre code. J'utilise Python3.7. Vous devrez peut-être exécuter locate python3.7 pour obtenir votre Python.

import os
os.environ["PYSPARK_PYTHON"] = "/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7"
0
James Chang

J'ai le même problème et j'ai défini les deux variables dans .bash_profile

export PYSPARK_PYTHON=/usr/local/bin/python3
export PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3

Mais mon problème est toujours là.

Ensuite, j'ai découvert que le problème est que ma version par défaut python est python 2.7 en tapant python --version

J'ai donc résolu le problème en suivant la page ci-dessous: Comment définir la version par défaut de Python sur 3.x sous OS X?

0
Ruxi Zhang