如何在 Python 3.12 上使用 Spark Connect 和 pyspark?

问题描述 投票:0回答:1

我正在尝试使用 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 对我来说不是一个选择。我错过了什么吗?我怎样才能让它发挥作用?

python pyspark setuptools spark-connect
1个回答
0
投票

在尝试导入

import setuptools
之前,您可能需要
distutils

长的答案是

setuptools
使用
MetaPathFinder
来告诉Python如何定位
distutils
。此
MetaPathFinder
仅在导入 sys.meta_path
 时添加到 
setuptools

这可能需要向库开发人员报告。

如果上述解决方法仍然不起作用,则可能有另一个依赖项正在尝试显式禁用此功能

MetaPathFinder

© www.soinside.com 2019 - 2024. All rights reserved.