So beheben Sie den Fehler 'TypeError: Eine Ganzzahl ist erforderlich (Typbytes erhalten)', wenn Sie versuchen, pyspark nach der Installation von spark 2.4.4 auszuführen

16

Ich habe OpenJDK 13.0.1 und Python 3.8 installiert und Spark 2.4.4. Anweisungen zum Testen der Installation müssen im Stammverzeichnis der Spark-Installation ausgeführt werden. \ Bin \ pyspark. Ich bin mir nicht sicher, ob ich einen Schritt in der Funkeninstallation verpasst habe, z. B. das Festlegen einer Umgebungsvariablen, aber ich kann keine weiteren detaillierten Anweisungen finden.

Ich kann den Python-Interpreter auf meinem Computer ausführen, daher bin ich sicher, dass er korrekt installiert ist und die Ausführung von "Java-Version" die erwartete Antwort liefert. Ich glaube also nicht, dass das Problem bei beiden liegt.

Ich erhalte eine Stapelspur von Fehlern von cloudpickly.py:

Traceback (most recent call last):
  File "C:\software\spark-2.4.4-bin-hadoop2.7\bin\..\python\pyspark\shell.py", line 31, in <module>
    from pyspark import SparkConf
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\__init__.py", line 51, in <module>
    from pyspark.context import SparkContext
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\context.py", line 31, in <module>
    from pyspark import accumulators
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\accumulators.py", line 97, in <module>
    from pyspark.serializers import read_int, PickleSerializer
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\serializers.py", line 71, in <module>
    from pyspark import cloudpickle
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py", line 145, in <module>
    _cell_set_template_code = _make_cell_set_template_code()
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py", line 126, in _make_cell_set_template_code
    return types.CodeType(
TypeError: an integer is required (got type bytes)
Chris
quelle

Antworten:

44

Dies geschieht, weil Sie Python 3.8 verwenden. Die neueste Pip-Version von pyspark (pyspark 2.4.4 zum Zeitpunkt des Schreibens) unterstützt Python 3.8 nicht. Führen Sie vorerst ein Downgrade auf Python 3.7 durch, und es sollte Ihnen gut gehen.

John
quelle
Danke, das ist großartig!
Chris
Dies funktionierte nicht für mich, herabgestuft auf 3.7.6
user2331566
1
Ich kann bestätigen, dass pyspark 2.4.4 mit python3.7.5
mork
Kann bestätigen, dass eine frische Conda-Umgebung mit Python 3.7.0 funktioniert! Vielen Dank.
J. Offenberg
Bestätigung, dass 3.7.7 funktioniert hat
Kolistivra
1

Als schmutzige _cell_set_template_codeProblemumgehung kann man die durch die Python3-Implementierung ersetzen, die von docstring of function vorgeschlagen wird _make_cell_set_template_code:

Notes
-----
In Python 3, we could use an easier function:

.. code-block:: python

   def f():
       cell = None

       def _stub(value):
           nonlocal cell
           cell = value

       return _stub

    _cell_set_template_code = f()

Hier ist ein Patch für spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Wenden Sie es an durch:

git apply <(curl https://gist.githubusercontent.com/ei-grad/d311d0f34b60ebef96841a3a39103622/raw)

Dies behebt das Problem mit ./bin/pyspark, aber ./bin/spark-submit verwendet die mitgelieferte Datei pyspark.zip mit einer eigenen Kopie von cloudpickle.py. Und wenn es dort behoben würde, würde es immer noch nicht funktionieren und mit demselben Fehler fehlschlagen, während ein Objekt entfernt wird pyspark/serializers.py.

Aber es sieht so aus, als ob die Unterstützung für Python 3.8 bereits eingetroffen ist, um v3.0.0-Preview2 zu aktivieren, sodass man es ausprobieren kann. Oder bleiben Sie bei Python 3.7, wie die akzeptierte Antwort nahelegt.

ei-grad
quelle
0

Versuchen Sie mit diesem Befehl, die neueste Version von pyinstaller zu installieren, die mit Python 3.8 kompatibel ist :

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

Referenz :
https://github.com/pyinstaller/pyinstaller/issues/4265

mohamed_18
quelle
1
Ich habe dies getan und pysparkgebe immer noch den gleichen Fehler
javadba
Hier gilt das gleiche. Es scheint, dass dies ein anderes Problem ist, auch wenn es sich um dieselbe Fehlermeldung handelt. Das Problem von OP tritt in auf pyspark\cloudpickle.py. Das PyInstaller-Problem tritt in auf PyInstaller\building\utils.py.
Steven