ChatGPT解决这个技术问题 Extra ChatGPT

如何在安装 spark 2.4.4 后尝试运行 pyspark 时修复“TypeError:需要整数(获取类型字节)”错误

我已经安装了 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)

J
John

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


我可以确认 pyspark 2.4.4 与 python3.7.5 一起为我工作
可以确认使用 python 3.7.0 的全新 conda 环境有效!谢谢。
这是问题跟踪器错误的链接:issues.apache.org/jira/browse/SPARK-29536 和 github 拉取请求:github.com/apache/spark/pull/26194。对此的修复将是 pyspark 3.0 的一部分。 2019 年 3 月 30 日,v3.0.0-rc1 发布了测试版:github.com/apache/spark/releases。希望 v3.0.0 即将推出。
我使用 Spark 2.4.4 版,它与 conda python 3.7.0 有同样的问题
我使用 spark 2.4.6,并使用 this 在 ubuntu 20.04 上安装 python 3.7.8 解决了这个问题。
A
Ani Menon

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

pip install --upgrade pyspark

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

pyspark 包文档明确指出:

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


e
ei-grad

作为一种肮脏的解决方法,可以通过 _make_cell_set_template_code 函数的文档字符串将 _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 中的某些对象时失败并出现同样的错误。

但看起来 Python 3.8 支持已经到了 spark v3.0.0-preview2,所以可以尝试一下。或者,像公认的答案所暗示的那样,坚持使用 Python 3.7。


P
Paul

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

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


这里同样的问题。通过从 PySpark 2.4.4 升级到 3.01 解决了这个问题。
J
Jelmer

python 3.8 的问题已在最新版本中得到解决。我收到此错误是因为我的 scikit-learn 版本非常过时

pip install scikit-learn --upgrade

解决了问题


m
mohamed_abdullah

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

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

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


我这样做了,pyspark 仍然给出同样的错误
同样在这里。似乎这是一个不同的问题,即使它是相同的错误消息。 OP 的问题发生在 pyspark\cloudpickle.py。 PyInstaller 问题发生在 PyInstaller\building\utils.py

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅