web-dev-qa-db-fra.com

clé non trouvée: _PYSPARK_DRIVER_CALLBACK_HOST

J'essaye de lancer ce code:

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder \
        .master("local") \
        .appName("Word Count") \
        .getOrCreate()

df = spark.createDataFrame([
    (1, 144.5, 5.9, 33, 'M'),
    (2, 167.2, 5.4, 45, 'M'),
    (3, 124.1, 5.2, 23, 'F'),
    (4, 144.5, 5.9, 33, 'M'),
    (5, 133.2, 5.7, 54, 'F'),
    (3, 124.1, 5.2, 23, 'F'),
    (5, 129.2, 5.3, 42, 'M'),
   ], ['id', 'weight', 'height', 'age', 'gender'])

df.show()
print('Count of Rows: {0}'.format(df.count()))
print('Count of distinct Rows: {0}'.format((df.distinct().count())))

spark.stop()

Et avoir une erreur 

18/06/22 11:58:39 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[main,5,main]
Java.util.NoSuchElementException: key not found: _PYSPARK_DRIVER_CALLBACK_Host
    ...
Exception: Java gateway process exited before sending its port number

J'utilise PyCharm et MacOS, Python 3.6, Spark 2.3.1

Quelle est la raison possible de cette erreur?

7
bboy

Cette erreur est le résultat d'une incompatibilité de version. La variable d'environnement référencée dans le suivi (_PYSPARK_DRIVER_CALLBACK_Host) a été supprimée lors de met à jour la dépendance Py4j vers 0.10.7 et est reportée dans la branche 2.3 dans 2.3.1.

Considérant les informations de version:

J'utilise PyCharm et MacOS, Python 3.6, Spark 2.3.1

il semble que le paquet 2.3.1 soit installé, mais SPARK_HOME pointe vers une installation plus ancienne (2.3.0 ou antérieure).

11
hi-zir

Cette résolution que je suis sur le point de rendre prend également en charge l'erreur "clé introuvable: _PYSPARK_DRIVER_CALLBACK_Host/Java Gateway/PySpark 2.3.1" !! Ajoutez à votre bashrc ou/etc/environment ou/etc/profile

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

Cela devrait faire le doobie juste là. Vous pouvez me remercier d'avance. #pouces vers le haut :)

7
SCOTT McNEIL

la variable env dans .bash_profile ou/etc/profile n’est pas accessible par votre code, insérez-les directement dans votre code.

import os
import sys

os.environ['SPARK_HOME'] = "/opt/cloudera/parcels/SPARK2/lib/spark2"
os.environ['PYSPARK_SUBMIT_ARGS'] = "--master yarn pyspark-Shell" 




sys.path.append(os.path.join(os.environ['SPARK_HOME'], "python"))
sys.path.append(os.path.join(os.environ['SPARK_HOME'], "python/lib/py4j-0.10.6-src.Zip"))


try:
    from pyspark import SparkContext
    from pyspark.sql import SparkSession

    from pyspark import SparkConf

    print("success")

except ImportError as e:
    print("error importing spark modules", e)
    sys.exit(1)

0
xfly