我已经安装了 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)
发生这种情况是因为您使用的是 python 3.8。 pyspark 的最新 pip 版本(撰写本文时为 pyspark 2.4.4)不支持 python 3.8。现在降级到 python 3.7,你应该没问题。
就像 John 正确指出的那样,它的 python 和 pyspark 版本不匹配。对于较新的 python 版本,您可以尝试,
pip install --upgrade pyspark
如果有可用的软件包,这将更新软件包。如果这没有帮助,那么您可能必须降级到兼容版本的 python。
pyspark
包文档明确指出:
注意:如果您将它与 Spark 独立集群一起使用,您必须确保版本(包括次要版本)匹配,否则您可能会遇到奇怪的错误。
作为一种肮脏的解决方法,可以通过 _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。
确保使用正确版本的 Java、Python 和 Spark。我遇到了由过时的 Spark 版本(Spark 2.4.7)引起的相同错误。
通过下载最新的 Spark 3.0.1、Python 3.8(作为 Anaconda3 2020.07 的一部分)和 Java JDK 8 为我解决了问题!
python 3.8 的问题已在最新版本中得到解决。我收到此错误是因为我的 scikit-learn 版本非常过时
pip install scikit-learn --upgrade
解决了问题
尝试使用以下命令安装可以与 python 3.8 兼容的最新版本的 pyinstaller:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
参考:
https://github.com/pyinstaller/pyinstaller/issues/4265
pyspark
仍然给出同样的错误
pyspark\cloudpickle.py
。 PyInstaller 问题发生在 PyInstaller\building\utils.py
。
不定期副业成功案例分享