You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.12中使用PySpark Spark Connect遇distutils缺失错误如何解决?

问题:Python 3.12下PySpark Spark Connect因distutils缺失报错的解决办法

我在Python 3.12环境中,尝试用PySpark的Spark Connect连接远程Spark集群,代码如下:

ingress_ep = "..."
access_token = "..."
conn_string = f"sc://{ingress_ep}/;token={access_token}"
spark = SparkSession.builder.remote(conn_string).getOrCreate()

运行后出现ModuleNotFoundError,报错信息如下:

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[13], line 11
      9 conn_string = f"sc://{ingress_ep}/;token={access_token}"
     10 print(conn_string)
---> 11 spark = SparkSession.builder.remote(conn_string).getOrCreate()

File c:\Users\...\venv2\Lib\site-packages\pyspark\sql\session.py:464, in SparkSession.Builder.getOrCreate(self)
    458 if (
    459     "SPARK_CONNECT_MODE_ENABLED" in os.environ
    460     or "SPARK_REMOTE" in os.environ
    461     or "spark.remote" in opts
    462 ):
    463     with SparkContext._lock:
--> 464         from pyspark.sql.connect.session import SparkSession as RemoteSparkSession
    466         if (
    467             SparkContext._active_spark_context is None
    468             and SparkSession._instantiatedSession is None
    469         ):
    470             url = opts.get("spark.remote", os.environ.get("SPARK_REMOTE"))

File c:\Users\...\venv2\Lib\site-packages\pyspark\sql\connect\session.py:19
      1 #
      2 # Licensed to the Apache Software Foundation (ASF) under one or more
      3 # contributor license agreements.  See the NOTICE file distributed with
...
---> 24 from distutils.version import LooseVersion
     26 try:
     27     import pandas

ModuleNotFoundError: No module named 'distutils'

已知Python 3.12移除了distutils,已安装setuptools并设置环境变量SETUPTOOLS_USE_DISTUTILS='local',但问题依旧,且无法降级Python版本,求解决办法。

解决办法
  • 安装第三方distutils包:Python官方移除distutils后,有第三方维护的兼容版本可通过pip安装:
    pip install distutils
    
  • 升级PySpark到兼容版本:PySpark 3.5.0及以上版本已适配Python 3.12,修复了distutils依赖问题,执行升级命令:
    pip install --upgrade pyspark
    
  • 手动创建distutils软链接(Linux/macOS):如果安装第三方包无效,可从setuptools中找到内置的_distutils模块,创建软链接到Python的site-packages目录:
    1. 找到setuptools的_distutils路径,示例:/usr/local/lib/python3.12/site-packages/setuptools/_distutils
    2. 进入Python site-packages目录,执行软链接命令:
      ln -s /usr/local/lib/python3.12/site-packages/setuptools/_distutils distutils
      
  • 临时修改PySpark源码(不推荐):找到报错的pyspark/sql/connect/session.py文件,将第24行的from distutils.version import LooseVersion替换为from setuptools._distutils.version import LooseVersion,此方法仅作应急,PySpark升级后会失效。

内容的提问来源于stack exchange,提问作者Kai Roesner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:57:05