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

16

J'ai installé OpenJDK 13.0.1 et python 3.8 et spark 2.4.4. Les instructions pour tester l'installation consistent à exécuter. \ Bin \ pyspark à partir de la racine de l'installation spark. Je ne sais pas si j'ai raté une étape de l'installation de spark, comme la définition d'une variable d'environnement, mais je ne trouve aucune autre instruction détaillée.

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 soit 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)
Chris
la source

Réponses:

45

Cela se produit parce que vous utilisez python 3.8. La dernière version pip de pyspark (pyspark 2.4.4 au moment de la rédaction) ne prend pas en charge python 3.8. Rétrogradez vers python 3.7 pour l'instant, et ça devrait aller.

John
la source
Merci, c'est super!
Chris
cela n'a pas fonctionné pour moi, rétrogradé à 3.7.6
user2331566
1
Je peux confirmer que pyspark 2.4.4 fonctionne pour moi avec python3.7.5
mork
Peut confirmer qu'un nouvel environnement conda avec python 3.7.0 fonctionne! Merci.
J.Offenberg
Confirmer que 3.7.7 a fonctionné
kolistivra Il y a
1

Comme solution de contournement on peut remplacer le _cell_set_template_codepar l'implémentation Python3 uniquement suggérée par docstring de _make_cell_set_template_codefonction:

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 patch 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à, cela ne fonctionnerait toujours pas, échouant avec la même erreur tout en décochant un objet pyspark/serializers.py.

Mais il semble que le support de Python 3.8 soit déjà arrivé pour déclencher v3.0.0-preview2, donc on peut l'essayer. Ou, respectez Python 3.7, comme le suggère la réponse acceptée.

ei-grad
la source
0

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

mohamed_18
la source
1
Je l'ai fait et pysparkdonne toujours la même erreur
javadba
Pareil ici. Il semble que ce soit un problème différent, même s'il s'agit du même message d'erreur. Le problème d'OP se produit en pyspark\cloudpickle.py. Le problème PyInstaller se produit dans PyInstaller\building\utils.py.
Steven