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

我已经安装了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",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)
lovepiaohan 回答:在安装spark 2.4.4后尝试运行pyspark时如何解决'TypeError:整数是必需的(got类型字节)'错误

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

,

它的python和pyspark版本不匹配,就像约翰正确指出的那样。 对于较新的python版本,您可以尝试

pip install --upgrade pyspark

这将更新软件包(如果有)。如果这样做没有帮助,那么您可能必须降级到python的兼容版本。


pyspark软件包文档明确指出:

注意:如果将它与Spark独立集群一起使用,则必须确保版本(包括次要版本)匹配,否则可能会遇到奇怪的错误。

,

作为一种肮脏的解决方法,可以使用_cell_set_template_code函数的文档字符串将_make_cell_set_template_code替换为仅Python3的实现suggested

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中的某些对象时会出现相同的错误。

但是似乎已经提供了火花3.8.0.0-preview2的Python 3.8支持,因此可以尝试一下。或者,按照公认的答案建议使用Python 3.7。

,

确保使用正确版本的 Java、Python 和 Spark。 由于过时的 Spark 版本 (Spark 2.4.7),我遇到了同样的错误。

通过下载 Python 3.8 旁边的最新 Spark 3.0.1(作为 Anaconda3 2020.07 的一部分)和 Java JDK 8 为我解决了问题!

,

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

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

参考
https://github.com/pyinstaller/pyinstaller/issues/4265

,

感谢@John。我删除了3.8并安装了3.7.5。它工作正常。我不知道我认为macos似乎有错误。它可以在我的Windows OS中使用。

本文链接:https://www.f2er.com/3164024.html

大家都在问