本地PySpark导入失败求助:TypeError错误排查
PySpark导入报错问题排查
在Windows 10 64位系统上使用Python 3.11本地运行PySpark时,导入pyspark模块持续报错,错误栈如下:
Traceback (most recent call last): File "spark_test.py", line 6, in <module> import pyspark File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\__init__.py", line 51, in <module> from pyspark.context import SparkContext File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\context.py", line 31, in <module> from pyspark import accumulators File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\accumulators.py", line 97, in <module> from pyspark.serializers import read_int, PickleSerializer File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\serializers.py", line 71, in <module> from pyspark import cloudpickle File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\cloudpickle.py", line 145, in <module> _cell_set_template_code = _make_cell_set_template_code() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\SPARK/spark-2.4.3-bin-hadoop2.8\python\pyspark\cloudpickle.py", line 126, in _make_cell_set_template_code return types.CodeType( ^^^^^^^^^^^^^^^ TypeError: code expected at least 16 arguments, got 15
使用的Python代码如下:
# Find Spark location import findspark findspark.init("C:/SPARK/spark-2.4.3-bin-hadoop2.8") # Imports import pyspark if __name__ == "__main__": spark = pyspark.SparkContext(appName="SparkTest")
问题原因
核心问题是Spark版本与Python版本不兼容:
- Spark 2.4.3官方支持的Python版本为2.7、3.4、3.5、3.6,完全不支持Python 3.11
- 报错中的
types.CodeType参数数量错误,是因为Python 3.10+对CodeType的构造参数做了新增调整,而Spark 2.4.3内置的cloudpickle版本过旧,无法适配这个变化
解决方案
有两种可行方案:
- 降级Python版本:将Python版本换成Spark 2.4.3支持的版本,比如Python 3.6
- 升级Spark版本:选择支持Python 3.11的Spark版本,比如Spark 3.4.0及以上(Spark 3.3.0开始支持Python 3.10,3.4.0正式支持Python 3.11)
内容的提问来源于stack exchange,提问作者syy
相关产品推荐
相关产品推荐

