Jak naprawić błąd „TypeError: wymagana jest liczba całkowita (mam bajty typu)” podczas próby uruchomienia pyspark po zainstalowaniu Spark 2.4.4

16

Zainstalowałem OpenJDK 13.0.1 oraz Python 3.8 i Spark 2.4.4. Instrukcje testowania instalacji należy uruchomić. \ Bin \ pyspark z katalogu głównego instalacji Spark. Nie jestem pewien, czy przegapiłem krok w instalacji Spark, jak ustawienie zmiennej środowiskowej, ale nie mogę znaleźć żadnych dalszych szczegółowych instrukcji.

Mogę uruchomić interpreter Pythona na moim komputerze, więc jestem pewien, że jest on poprawnie zainstalowany, a uruchomienie „java -version” daje mi oczekiwaną odpowiedź, więc nie sądzę, aby problem dotyczył któregokolwiek z nich.

Otrzymuję ślad stosu błędów z 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
źródło

Odpowiedzi:

43

Dzieje się tak, ponieważ używasz Pythona 3.8. Najnowsza wersja pyspark pyspark (pyspark 2.4.4 w momencie pisania) nie obsługuje Pythona 3.8. Przejdź na teraz na Python 3.7 i powinieneś być w porządku.

Jan
źródło
Dzięki, to świetnie!
Chris
to nie działało dla mnie, obniżono wersję do 3.7.6
user2331566
1
Mogę potwierdzić, że pyspark 2.4.4 działa na mnie z
python3.7.5
Potwierdza, że ​​działa świeże środowisko conda z python 3.7.0! Dzięki.
J. Offenberg
Potwierdzenie, że 3.7.7 zadziałało
kolistivra
1

Jako nieprzyzwoite obejście można zastąpić _cell_set_template_codeimplementacją tylko w języku Python3 sugerowaną przez docstring _make_cell_set_template_codefunkcji:

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

Oto poprawka do Spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Zastosuj przez:

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

To rozwiązuje problem z ./bin/pyspark, ale ./bin/spark-submit używa dołączonego pliku pyspark.zip z własną kopią cloudpickle.py. A jeśli zostałby tam naprawiony, to nadal nie działałby, powodując błąd z tym samym błędem podczas rozpakowywania jakiegoś obiektu pyspark/serializers.py.

Wygląda jednak na to, że obsługa języka Python 3.8 została już dostarczona do Spark 3.0.0-Preview2, więc można go wypróbować. Lub trzymaj się Python 3.7, jak sugeruje zaakceptowana odpowiedź.

ei-grad
źródło
0

Spróbuj zainstalować najnowszą wersję pyinstaller, która może być kompatybilna z python 3.8, używając tego polecenia:

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

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

mohamed_18
źródło
1
Zrobiłem to i pysparknadal daje ten sam błąd
javadba
To samo tutaj. Wygląda na to, że jest to inny problem, nawet jeśli jest to ten sam komunikat o błędzie. Problem OP pojawia się w pyspark\cloudpickle.py. Występuje problem z PyInstaller PyInstaller\building\utils.py.
Steven