Cómo corregir el error 'TypeError: se requiere un entero (tiene bytes de tipo)' al intentar ejecutar pyspark después de instalar spark 2.4.4

16

He instalado OpenJDK 13.0.1 y python 3.8 y spark 2.4.4. Las instrucciones para probar la instalación son ejecutar. \ Bin \ pyspark desde la raíz de la instalación de spark. No estoy seguro si me perdí un paso en la instalación de la chispa, como configurar alguna variable de entorno, pero no puedo encontrar más instrucciones detalladas.

Puedo ejecutar el intérprete de Python en mi máquina, así que estoy seguro de que está instalado correctamente y ejecutar "java -version" me da la respuesta esperada, así que no creo que el problema sea con ninguno de esos.

Obtengo un rastro de errores de 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
fuente

Respuestas:

44

Esto está sucediendo porque estás usando Python 3.8. La última versión pip de pyspark (pyspark 2.4.4 en el momento de la escritura) no es compatible con python 3.8. Baje a Python 3.7 por ahora, y debería estar bien.

Juan
fuente
Gracias, esto es genial!
Chris
esto no funcionó para mí, degradado a 3.7.6
user2331566
1
Puedo confirmar que pyspark 2.4.4 está funcionando para mí con python3.7.5
mork
¡Puede confirmar que un nuevo entorno de conda con python 3.7.0 funciona! Gracias.
J. Offenberg
Confirmando que 3.7.7 funcionó
kolistivra hace
1

Como solución alternativa sucia, se puede reemplazar _cell_set_template_codecon la implementación solo de Python3 sugerida por docstring de la _make_cell_set_template_codefunción:

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

Aquí hay un parche para spark v2.4.5: https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Aplicarlo por:

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

Esto soluciona el problema con ./bin/pyspark, pero ./bin/spark-submit usa pyspark.zip incluido con su propia copia de cloudpickle.py. Y si se solucionara allí, entonces todavía no funcionaría, fallando con el mismo error mientras se desengancha algún objeto pyspark/serializers.py.

Pero parece que el soporte de Python 3.8 ya llegó a spark v3.0.0-preview2, por lo que uno puede probarlo. O, quédese con Python 3.7, como sugiere la respuesta aceptada.

ei-grad
fuente
0

Intente instalar la última versión de pyinstaller que sea compatible con python 3.8 con este comando:

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

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

mohamed_18
fuente
1
Hice esto y pysparktodavía da el mismo error
javadba
Igual que aquí. Parece que este es un problema diferente, incluso si es el mismo mensaje de error. El problema de OP ocurre en pyspark\cloudpickle.py. El problema PyInstaller ocurre en PyInstaller\building\utils.py.
Steven