web-dev-qa-db-fra.com

Erreur Py4J lors de la création d'un cadre de données spark à l'aide de pyspark

J'ai installé pyspark avec python 3.6 et j'utilise jupyter notebook pour initialiser une session d'allumage.

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("test").enableHieSupport.getOrCreate()

qui fonctionne sans erreur

Mais j'écris

df = spark.range(10)
df.show()

Il me jette une erreur ->

Py4JError: An error occurred while calling o54.showString. Trace:
py4j.Py4JException: Method showString([class Java.lang.Integer, class Java.lang.Integer, class Java.lang.Boolean]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.Java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.Java:326)
    at py4j.Gateway.invoke(Gateway.Java:272)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.Java:132)
    at py4j.commands.CallCommand.execute(CallCommand.Java:79)
    at py4j.GatewayConnection.run(GatewayConnection.Java:214)
    at Java.lang.Thread.run(Thread.Java:745)

Je ne sais pas pourquoi je suis confronté à ce problème.

Si je fais,

from pyspark import SparkContext
sc = SparkContext()
print(sc.version)

'2.1.0'
7
Regressor

Je suis heureux maintenant parce que j'ai eu exactement le même problème avec mon pyspark et j'ai trouvé "la solution". Dans mon cas, je tourne sous Windows 10. Après de nombreuses recherches sur Google, j'ai trouvé le moyen correct de définir les variables d'environnement requises: PYTHONPATH=$SPARK_HOME$\python;$SPARK_HOME$\python\lib\py4j-<version>-src.Zip vérifiez ce que vous avez dans votre étincelle et modifiez le paramètre fictif en conséquence ... Pour une référence complète au processus, consultez ce site: comment installer spark localement

8
user_dhrn

Je devais simplement définir la variable d'environnement SPARK_HOME à l'emplacement de spark. J'ai ajouté les lignes suivantes à mon fichier ~/.bashrc.

# SPARK_HOME
export SPARK_HOME="/home/pyuser/anaconda3/lib/python3.6/site-packages/pyspark/"

Depuis que j'utilise différentes versions de spark dans différents environnements, j'ai suivi ce tutoriel ( link ) pour créer des variables d'environnement pour chaque environnement de conda.

2
GeneticsGuy

Si vous utilisez pyspark dans anaconda, ajoutez le code ci-dessous pour définir SPARK_HOME avant d'exécuter vos codes:

import os
import sys
spark_path = r"spark-2.3.2-bin-hadoop2.7" # spark installed folder
os.environ['SPARK_HOME'] = spark_path
sys.path.insert(0, spark_path + "/bin")
sys.path.insert(0, spark_path + "/python/pyspark/")
sys.path.insert(0, spark_path + "/python/lib/pyspark.Zip")
sys.path.insert(0, spark_path + "/python/lib/py4j-0.10.7-src.Zip")
1
Tung Nguyen

Je pense que spark.range est supposé renvoyer un objet RDD. Par conséquent, show n'est pas une méthode que vous pouvez utiliser. Veuillez utiliser plutôt collect ou take.

Vous pouvez également remplacer spark.range par sc.range si vous souhaitez utiliser show.

0
Steven