Як виправити помилку 'TypeError: потрібне ціле число (отримані байти типу)' при спробі запуску pyspark після встановлення іскри 2.4.4


16

Я встановив OpenJDK 13.0.1 та python 3.8 та spark 2.4.4. Інструкція для перевірки встановлення полягає у запуску. \ Bin \ pyspark з кореня установки іскри. Я не впевнений, чи пропустив я крок в установці іскри, наприклад встановлення якоїсь змінної середовища, але не можу знайти більш детальних інструкцій.

Я можу запустити інтерпретатор python на своїй машині, тому я впевнений, що він встановлений правильно і запуск "java -версії" дає мені очікуваний відгук, тому я не думаю, що проблема полягає в жодному з цих.

Я отримую стек помилок із 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)

Відповіді:


43

Це відбувається тому, що ви використовуєте python 3.8. Останній pip-реліз pyspark (pyspark 2.4.4 під час написання) не підтримує python 3.8. Перейдіть на python 3.7 поки що, і вам слід добре.


Дякую, це чудово!
Кріс

це не спрацювало для мене, знизившись до 3.7.6
user2331566

1
Я можу підтвердити, що pyspark 2.4.4 працює для мене з python3.7.5
mork

Можна підтвердити, що свіжа конда-середовище з python 3.7.0 працює! Дякую.
Дж. Оффенберг

Підтвердження того, що спрацювало
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()

Ось патч для іскри 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 вже отримана, щоб викликати 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/isissue/4265


1
Я це зробив і pysparkдосі дає ту саму помилку
javadba

Те ж саме. Здається, це інша проблема, навіть якщо це те саме повідомлення про помилку. Проблема ОП трапляється в pyspark\cloudpickle.py. Проблема PyInstaller трапляється в PyInstaller\building\utils.py.
Стівен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.