webentwicklung-frage-antwort-db.com.de

schlüssel nicht gefunden: _PYSPARK_DRIVER_CALLBACK_HOST

Ich versuche diesen Code auszuführen:

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()

Und einen Fehler bekommen 

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

Ich verwende PyCharm und MacOS, Python 3.6, Spark 2.3.1

Was ist der mögliche Grund für diesen Fehler?

7
bboy

Dieser Fehler ist das Ergebnis eines Versionskonflikts. Die Umgebungsvariable, auf die im Traceback (_PYSPARK_DRIVER_CALLBACK_Host) verwiesen wird, wurde während der update Py4j-Abhängigkeit auf 0.10.7 entfernt und in 2.3.1 auf den Zweig 2.3 zurückportiert.

Versionsinformationen berücksichtigen:

Ich verwende PyCharm und MacOS, Python 3.6, Spark 2.3.1

anscheinend haben Sie das Paket 2.3.1 installiert, aber SPARK_HOME weist auf eine ältere Installation (2.3.0 oder früher) hin.

11
hi-zir

Diese Auflösung, die ich gerade rendere, berücksichtigt auch den Fehler "Schlüssel nicht gefunden: _PYSPARK_DRIVER_CALLBACK_Host/Java Gateway/PySpark 2.3.1" !! Fügen Sie Ihrem bashrc oder/etc/environment oder/etc/profile hinzu

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

Das sollte das Doobie genau dort tun. Sie können mir im Voraus danken. #Daumen hoch :)

7
SCOTT McNEIL

auf die Env-Variable in .bash_profile oder/etc/profile kann mit Ihrem Code möglicherweise nicht zugegriffen werden. Geben Sie sie direkt in den Code ein.

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