Apache spark 如何修复';TypeError:需要一个整数(获取类型字节)';安装spark 2.4.4后尝试运行pyspark时出错
我已经安装了OpenJDK 13.0.1、python 3.8和spark 2.4.4。测试安装的说明将运行。\bin\pyspark,从spark安装的根目录开始。我不确定我是否错过了spark安装的一个步骤,比如设置一些环境变量,但我找不到任何进一步的详细说明 我可以在我的机器上运行python解释器,因此我确信它安装正确,并且运行“java-version”会给我预期的响应,所以我认为这两个都不是问题所在 我从cloudpickly.py获得了错误的堆栈跟踪:Apache spark 如何修复';TypeError:需要一个整数(获取类型字节)';安装spark 2.4.4后尝试运行pyspark时出错,apache-spark,pyspark,Apache Spark,Pyspark,我已经安装了OpenJDK 13.0.1、python 3.8和spark 2.4.4。测试安装的说明将运行。\bin\pyspark,从spark安装的根目录开始。我不确定我是否错过了spark安装的一个步骤,比如设置一些环境变量,但我找不到任何进一步的详细说明 我可以在我的机器上运行python解释器,因此我确信它安装正确,并且运行“java-version”会给我预期的响应,所以我认为这两个都不是问题所在 我从cloudpickly.py获得了错误的堆栈跟踪: Traceback (mos
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)
回溯(最近一次呼叫最后一次):
文件“C:\software\spark-2.4.4-bin-hadoop2.7\bin\..\python\pyspark\shell.py”,第31行,在
从pyspark导入SparkConf
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\ \uuuu init\uuuu.py”,第51行,在
从pyspark.context导入SparkContext
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\context.py”,第31行,在
来自pyspark进口蓄能器
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\acculators.py”,第97行,在
从pyspark.serializers导入read_int,PickleSerializer
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\serializers.py”,第71行,在
从Pypark导入cloudpickle
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py”,第145行,在
_单元设置模板代码=\u生成单元设置模板代码()
文件“C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py”,第126行,位于“生成单元集模板”代码中
返回类型.代码类型(
TypeError:需要整数(获取类型字节)
之所以发生这种情况,是因为您使用的是python 3.8。pyspark的最新pip版本(撰写本文时为pyspark 2.4.4)不支持python 3.8。请暂时降级到python 3.7,您应该不会有问题。使用以下命令尝试安装最新版本的pyinstaller,该版本可以与python 3.8兼容:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
参考:作为一种肮脏的解决方法,可以通过
\u make\u cell\u set\u template\u code
函数的docstring将\u cell\u template\u code>替换为Python3-only实现:
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的补丁:
通过以下方式应用它:
git apply <(curl https://gist.githubusercontent.com/ei-grad/d311d0f34b60ebef96841a3a39103622/raw)
git apply的python和pyspark版本不匹配,正如John正确指出的那样。
对于较新的python版本,您可以尝试
pip install --upgrade pyspark
这将更新包(如果有可用的话)。如果这没有帮助,那么您可能必须降级到兼容的python版本
pyspark
package doc明确规定:
注意:如果您使用Spark standalone群集,则必须确保版本(包括次要版本)匹配,否则您可能会遇到奇怪的错误
确保使用正确版本的Java、Python和Spark。
我得到了由过时的Spark版本(Spark 2.4.7)引起的相同错误
下载Python 3.8旁边最新的Spark 3.0.1(作为Anaconda3 2020.07的一部分)Java JDK 8为我解决了这个问题!我可以确认pyspark 2.4.4在python3.7.5上对我有效,可以确认使用python3.7.0的全新conda环境可以正常工作!谢谢。这是问题跟踪程序bug的链接:和github pull请求:用于此。这方面的修复将是pyspark 3.0的一部分。2019年3月30日,v3.0.0-rc1是在测试版中发布的:。希望v3.0.0即将发布。我使用Spark 2.4.4版,它给conda python 3.7.0带来了同样的问题。我使用Spark 2.4.6,并在ubuntu 20.04上安装python 3.7.8,使用解决了这个问题。我这样做了,pyspark
仍然在这里给出同样的错误。看起来这是一个不同的问题,即使我相同的错误消息。OP的问题发生在pyspark\cloudpickle.py
中。PyInstaller问题发生在PyInstaller\building\utils.py
中。