在安装spark 2.4.4后尝试运行pyspark时如何解决'TypeError:整数是必需的(got类型字节)'错误


16

我已经安装了OpenJDK 13.0.1,python 3.8和spark 2.4.4。测试安装的说明是从spark安装的根目录运行。\ bin \ pyspark。我不确定是否错过了Spark安装步骤,例如设置一些环境变量,但是找不到任何进一步的详细说明。

我可以在我的机器上运行python解释器,因此我确信它已正确安装,并且运行“ 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)

Answers:


43

发生这种情况是因为您使用的是python 3.8。pyspark的最新pip版本(在撰写本文时为pyspark 2.4.4)不支持python 3.8。现在降级到python 3.7,应该没问题。


谢谢,太好了!
克里斯,

这对我不起作用,降级为3.7.6
user2331566

1
我可以确认pyspark 2.4.4正在使用python3.7.5为我工作
mork

可以确认使用python 3.7.0的全新conda环境有效!谢谢。
J. Offenberg

确认3.7.7有效
kolistivra

1

作为一种肮脏的解决方法,可以用函数docstring 建议_cell_set_template_code的仅Python3实现代替:_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副本。而且,如果将其固定在那里,那么它仍然将无法正常工作,并且在取消拾取中的某些对象时会出现相同的错误pyspark/serializers.py

但是看起来似乎已经对Spark v3.0.0-preview2提供了Python 3.8支持,因此可以尝试一下。或者,遵循公认的答案,遵循Python 3.7。


0

尝试使用以下命令安装与python 3.8兼容的pyinstaller的最新版本:

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问题发生在中PyInstaller\building\utils.py
史蒂文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.