Как исправить ошибку «TypeError: требуется целое число (получено байтов типа)» при попытке запустить pyspark после установки spark 2.4.4

16

Я установил OpenJDK 13.0.1 и python 3.8 и спарк 2.4.4. Инструкция по проверке установки заключается в запуске. \ Bin \ pyspark из корня установки spark. Я не уверен, что пропустил какой-то шаг в установке spark, например, установил какую-то переменную окружения, но не могу найти более подробных инструкций.

Я могу запустить интерпретатор python на моей машине, так что я уверен, что он установлен правильно, и запуск «java -version» дает мне ожидаемый ответ, поэтому я не думаю, что проблема с любым из них.

Я получаю трассировку стека ошибок из 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)
Крис
источник

Ответы:

45

Это происходит потому, что вы используете Python 3.8. Последний выпуск pys park (pyspark 2.4.4 на момент написания) не поддерживает python 3.8. Вернитесь к питону 3.7, и у вас все будет хорошо.

Джон
источник
Спасибо, это здорово!
Крис
это не сработало для меня, понижено до 3.7.6
user2331566
1
Я могу подтвердить, что pyspark 2.4.4 работает для меня с python3.7.5
mork
Можно подтвердить, что работает свежая среда conda с python 3.7.0! Спасибо.
J. Offenberg
Подтверждение того, что 3.7.7 сработало
колистивра
1

В качестве грязного обходного пути можно заменить _cell_set_template_codeреализацию только на Python3, предложенную строкой _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()

Вот патч для spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Примените это:

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

Это устраняет проблему с ./bin/pyspark, но ./bin/spark-submit использует пакет pyspark.zip с собственной копией cloudpickle.py. И если он будет там исправлен, то он все равно не будет работать, если не получится с той же ошибкой при снятии какого-либо объекта pyspark/serializers.py.

Но похоже, что поддержка Python 3.8 уже пришла в spark v3.0.0-preview2, так что можно попробовать. Или придерживайтесь Python 3.7, как предполагает принятый ответ.

е-град
источник
0

Попробуйте установить последнюю версию pyinstaller, которая может быть совместима с python 3.8, с помощью этой команды:

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

ссылка :
https://github.com/pyinstaller/pyinstaller/issues/4265

mohamed_18
источник
1
Я сделал это и pysparkдо сих пор выдает ту же ошибку
Javadba
Тоже самое. Кажется, что это другая проблема, даже если это одно и то же сообщение об ошибке. Проблема ОП происходит в pyspark\cloudpickle.py. Проблема PyInstaller происходит в PyInstaller\building\utils.py.
Стивен