Cách sửa lỗi 'TypeError: bắt buộc phải có số nguyên (có byte kiểu) khi cố chạy pyspark sau khi cài đặt spark 2.4.4


16

Tôi đã cài đặt OpenJDK 13.0.1 và python 3.8 và spark 2.4.4. Hướng dẫn để kiểm tra cài đặt là chạy. \ Bin \ pyspark từ thư mục gốc của cài đặt tia lửa. Tôi không chắc chắn nếu tôi bỏ lỡ một bước trong cài đặt tia lửa, như đặt một số biến môi trường, nhưng tôi không thể tìm thấy bất kỳ hướng dẫn chi tiết nào nữa.

Tôi có thể chạy trình thông dịch python trên máy của mình, vì vậy tôi tự tin rằng nó được cài đặt chính xác và chạy "java -version" mang lại cho tôi phản hồi mong đợi, vì vậy tôi không nghĩ vấn đề xảy ra với một trong hai.

Tôi nhận được một dấu vết lỗi từ đám mây trên trang web:

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)

Câu trả lời:


44

Điều này xảy ra vì bạn đang sử dụng python 3.8. Bản phát hành pip mới nhất của pyspark (pyspark 2.4.4 tại thời điểm viết bài) không hỗ trợ python 3.8. Hạ cấp xuống python 3.7 bây giờ, và bạn sẽ ổn thôi.


Cảm ơn, điều này thật tuyệt!
Chris

điều này không hiệu quả với tôi, đã hạ cấp xuống 3.7.6
user2331566

1
Tôi có thể xác nhận pyspark 2.4.4 đang hoạt động với tôi với python3.7.5
mork

Có thể xác nhận rằng một môi trường conda tươi với python 3.7.0 hoạt động! Cảm ơn.
J. Offenberg

Xác nhận rằng 3.7.7 đã hoạt động
kolistivra

1

Là một cách giải quyết bẩn, người ta có thể thay thế _cell_set_template_codebằng cách triển khai chỉ Python3 được đề xuất bởi chuỗi _make_cell_set_template_codehàm của hàm:

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

Đây là bản vá cho spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Áp dụng nó bằng cách:

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

Điều này khắc phục sự cố với ./bin/pyspark, nhưng ./bin/spark-submit sử dụng gói pyspark.zip kèm theo bản sao của đám mây riêng. Và nếu nó được sửa ở đó, thì nó vẫn không hoạt động, thất bại với cùng một lỗi trong khi giải nén một số đối tượng pyspark/serializers.py.

Nhưng có vẻ như hỗ trợ Python 3.8 đã xuất hiện trên spark v3.0.0-preview2, vì vậy người ta có thể thử nó. Hoặc, bám vào Python 3.7, giống như câu trả lời được chấp nhận cho thấy.


0

Hãy thử cài đặt phiên bản mới nhất của pyinstaller có thể tương thích với python 3.8 bằng lệnh này:

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

tham khảo :
https://github.com/pyinstaller/pyinstaller/issues/4265


1
Tôi đã làm điều này và pysparkvẫn đưa ra lỗi tương tự
javadba

Tương tự ở đây. Có vẻ như đây là một vấn đề khác, ngay cả khi đó là cùng một thông báo lỗi. Vấn đề của OP xảy ra trong pyspark\cloudpickle.py. Vấn đề PyInstaller xảy ra trong PyInstaller\building\utils.py.
Steven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.