【问题标题】:How to fix 'TypeError: an integer is required (got type bytes)' error when trying to run pyspark after installing spark 2.4.4如何在安装 spark 2.4.4 后尝试运行 pyspark 时修复“TypeError:需要一个整数(获取类型字节)”错误
【发布时间】:2020-03-01 04:19:26
【问题描述】:

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

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    确保使用正确版本的 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 解决了这个问题。
    【解决方案2】:

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

    pip install --upgrade pyspark
    

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


    pyspark package doc 明确指出:

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

    【讨论】:

      【解决方案3】:

      作为一种肮脏的解决方法,可以通过_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。

      【讨论】:

        【解决方案4】:

        尝试使用此命令安装可以与 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
        【解决方案5】:

        发生这种情况是因为您使用的是 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,在 ubuntu 20.04 上使用 this 安装 python 3.7.8 解决了这个问题。
        猜你喜欢
        • 1970-01-01
        • 2020-06-01
        • 2020-08-04
        • 2020-01-25
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        相关资源
        最近更新 更多