Cara memperbaiki kesalahan 'TypeError: integer diperlukan (mendapat byte tipe)' ketika mencoba menjalankan pyspark setelah menginstal percikan 2.4.4

16

Saya telah menginstal OpenJDK 13.0.1 dan python 3.8 dan spark 2.4.4. Petunjuk untuk menguji instalasi adalah untuk menjalankan. \ Bin \ pyspark dari akar instalasi percikan. Saya tidak yakin apakah saya melewatkan langkah dalam instalasi percikan, seperti mengatur beberapa variabel lingkungan, tetapi saya tidak dapat menemukan petunjuk lebih lanjut.

Saya dapat menjalankan interpreter python di komputer saya, jadi saya yakin bahwa itu diinstal dengan benar dan menjalankan "java -versi" memberi saya respons yang diharapkan, jadi saya tidak berpikir masalahnya ada pada salah satu dari itu.

Saya mendapatkan jejak kesalahan dari 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
sumber

Jawaban:

44

Ini terjadi karena Anda menggunakan python 3.8. Rilis pip terbaru dari pyspark (pyspark 2.4.4 pada saat penulisan) tidak mendukung python 3.8. Turunkan versi ke python 3.7 untuk saat ini, dan Anda akan baik-baik saja.

John
sumber
Terima kasih, ini luar biasa!
Chris
ini tidak berhasil untuk saya, diturunkan ke 3.7.6
user2331566
1
Saya dapat mengonfirmasi pyspark 2.4.4 bekerja untuk saya dengan python3.7.5
mork
Dapat mengkonfirmasi bahwa lingkungan conda baru dengan python 3.7.0 berfungsi! Terima kasih.
J. Offenberg
Mengkonfirmasi bahwa 3.7.7 bekerja
kolistivra
1

Sebagai solusi kotor, seseorang dapat mengganti _cell_set_template_codedengan implementasi Python3-only yang disarankan oleh docstring of _make_cell_set_template_codefunction:

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

Berikut ini adalah patch untuk spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Terapkan oleh:

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

Ini memperbaiki masalah dengan ./bin/pyspark, tetapi ./bin/spark-submit menggunakan pyspark.zip yang dibundel dengan salinan cloudpickle.py sendiri. Dan jika itu akan diperbaiki di sana, maka itu masih tidak akan berhasil, gagal dengan kesalahan yang sama saat membongkar beberapa objek di pyspark/serializers.py.

Tapi sepertinya dukungan Python 3.8 sudah tiba untuk memicu v3.0.0-preview2, jadi orang bisa mencobanya. Atau, tetap gunakan Python 3.7, seperti yang disarankan jawaban yang diterima.

ei-grad
sumber
0

Coba instal versi terbaru pyinstaller yang dapat kompatibel dengan python 3.8 menggunakan perintah ini:

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

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

mohamed_18
sumber
1
Saya melakukan ini dan pysparkmasih memberikan kesalahan yang sama
javadba
Sama disini. Sepertinya ini adalah masalah yang berbeda, bahkan jika itu pesan kesalahan yang sama. Masalah OP terjadi pada pyspark\cloudpickle.py. Masalah PyInstaller terjadi di PyInstaller\building\utils.py.
Steven