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?
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).
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 :)
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)