我正在尝试使用 Spark Connect 在 Python 3.12 中使用 pyspark 在远程 Spark 集群上创建 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'
我知道
distuils
模块已从 Python 3.12 中删除。所以我已经安装了setuptools
并按照为什么我收到错误ModuleNotFoundError:没有名为“distutils”的模块?和尽管安装了setuptools但没有名为“distutils”的模块中的建议设置了
SETUPTOOLS_USE_DISTUTILS='local'
,但我仍然得到错误。
回到旧版本的 Python 对我来说不是一个选择。我错过了什么吗?我怎样才能让它发挥作用?
在尝试导入
import setuptools
之前,您可能需要 distutils
。
长的答案是
setuptools
使用MetaPathFinder
来告诉Python如何定位distutils
。此 MetaPathFinder
仅在导入 sys.meta_path
时添加到
setuptools
。
这可能需要向库开发人员报告。
如果上述解决方法仍然不起作用,则可能有另一个依赖项正在尝试显式禁用此功能
MetaPathFinder
。