วิธีแก้ไขข้อผิดพลาด 'TypeError: จำเป็นต้องใช้จำนวนเต็ม (มีชนิดเป็นไบต์)' เมื่อพยายามเรียกใช้ pyspark หลังจากติดตั้ง spark 2.4.4


16

ฉันติดตั้ง OpenJDK 13.0.1 และ python 3.8 และ spark 2.4.4 แล้ว คำแนะนำในการทดสอบการติดตั้งคือการรัน \ bin \ pyspark จากรูทของการติดตั้ง spark ฉันไม่แน่ใจว่าฉันพลาดขั้นตอนหนึ่งในการติดตั้งประกายไฟหรือไม่เช่นการตั้งค่าตัวแปรสภาพแวดล้อมบางอย่าง แต่ฉันไม่พบคำแนะนำโดยละเอียดเพิ่มเติมอีก

ฉันสามารถรัน python interpreter บนเครื่องของฉันดังนั้นฉันมั่นใจว่ามันถูกติดตั้งอย่างถูกต้องและการรัน "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)

คำตอบ:


44

สิ่งนี้เกิดขึ้นเพราะคุณใช้งูหลาม 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

สามารถยืนยันได้ว่าสภาพแวดล้อมแบบสดกับ python 3.7.0 ทำงานได้! ขอบคุณ
J. Offenberg

ยืนยันว่า 3.7.7 ทำงานได้
kolistivra

1

เนื่องจากวิธีแก้ไขปัญหาสกปรกสามารถแทนที่_cell_set_template_codeด้วยการใช้ Python3 เท่านั้นที่แนะนำโดย docstring ของ_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 และถ้ามันจะได้รับการแก้ไขมีแล้วก็ยังจะไม่ทำงานล้มเหลวด้วยข้อผิดพลาดเดียวกันในขณะที่ unpickling 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/issues/4265


1
ฉันทำสิ่งนี้และpysparkยังคงให้ข้อผิดพลาดเดียวกัน
javadba

กันที่นี่ ดูเหมือนว่านี่เป็นปัญหาที่แตกต่างกันแม้ว่าจะเป็นข้อความแสดงข้อผิดพลาดเดียวกัน ปัญหาของ OP เกิดขึ้นpyspark\cloudpickle.pyค่ะ PyInstaller\building\utils.pyปัญหาที่เกิดขึ้นใน PyInstaller
Steven
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.