web-dev-qa-db-fra.com

Comment corriger l'erreur «TypeError: un entier est requis (octets de type obtenus)» lors de la tentative d'exécution de pyspark après l'installation de spark 2.4.4

J'ai installé OpenJDK 13.0.1 et python 3.8 et spark 2.4.4. Les instructions pour tester l'installation sont à exécuter.\Bin\pyspark depuis le racine de l'installation spark. Je ne sais pas si j'ai raté une étape de l'installation spark, comme définir une variable d'environnement, mais je ne peux pas trouver d'autres instructions détaillées.

Je peux exécuter l'interpréteur python sur ma machine, donc je suis sûr qu'il est installé correctement et que l'exécution de "Java -version" me donne la réponse attendue, donc je ne pense pas que le problème est avec l'un ou l'autre.

J'obtiens une trace de la pile des erreurs 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)
13
Chris

Comme solution de contournement on peut remplacer le _cell_set_template_code avec l'implémentation Python3 uniquement suggéré par docstring de _make_cell_set_template_code fonction:

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

Voici un correctif pour spark v2.4.5: https://Gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

Appliquez-le par:

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

Cela résout le problème avec ./bin/pyspark, mais ./bin/spark-submit utilise pyspark.Zip fourni avec sa propre copie de cloudpickle.py. Et si cela devait être corrigé là, alors cela ne fonctionnerait toujours pas, échouant avec la même erreur tout en décochant un objet dans pyspark/serializers.py.

Mais cela ressemble à Python 3.8 est déjà arrivé à spark v3.0.0-preview2, donc on peut l'essayer. Ou, s'en tenir à Python 3.7, comme le suggère la réponse acceptée.

0
ei-grad

Essayez d'installer la dernière version de pyinstaller qui peut être compatible avec python 3.8 en utilisant cette commande:

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

référence :
https://github.com/pyinstaller/pyinstaller/issues/4265

0
mohamed_18