我是 PySpark 新手,正在尝试运行一个简单的代码块,其中涉及创建 Spark 会话:
from pyspark.sql import *
if __name__ == "__main__":
spark = SparkSession \
.builder \
.appName("HelloSpark") \
.master("local[2]") \
.getOrCreate()
当我尝试运行代码块时,收到以下错误:
Traceback (most recent call last):
File "/Users/aj24/Documents/spark_code/spark_test_bed/logging_in_spark/logging.py", line 1, in <module>
from pyspark.sql import *
File "/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/pyspark/__init__.py", line 58, in <module>
from pyspark.conf import SparkConf
File "/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/pyspark/conf.py", line 23, in <module>
from py4j.java_gateway import JVMView, JavaObject
File "/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/py4j/java_gateway.py", line 16, in <module>
import logging
File "/Users/aj24/Documents/spark_code/spark_test_bed/logging_in_spark/logging.py", line 1, in <module>
from pyspark.sql import *
File "/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/pyspark/sql/__init__.py", line 42, in <module>
from pyspark.sql.types import Row
File "/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/pyspark/sql/types.py", line 49, in <module>
from py4j.java_gateway import GatewayClient, JavaClass, JavaGateway, JavaObject, JVMView
ImportError: cannot import name 'GatewayClient' from partially initialized module 'py4j.java_gateway' (most likely due to a circular import) (/Users/aj24/Documents/spark_code/spark_test_bed/venv/lib/python3.12/site-packages/py4j/java_gateway.py)
我安装了Python3.12的brew,并使用虚拟环境在VSCode上运行代码。我的解释器也指向虚拟环境的解释器。
有什么想法可能会导致循环导入问题吗?
这可能是因为 Python 文件的名称
logging.py
与 Python 标准库日志记录模块之间存在冲突。当您尝试导入 pyspark.sql(在内部导入日志记录)时,Python 会感到困惑并最终导入您的logging.py 文件而不是标准库日志记录模块。这会导致导入不完整或损坏,从而导致循环导入错误。
尝试几个步骤并检查是否有效:
1.将文件logging.py重命名为其他名称(例如spark_logging.py)
2.删除.pyc文件和pycache:重命名文件后,删除项目中的所有logging.pyc文件和pycache目录(如果存在)。您通常可以在与logging.py相同的目录中找到它们。
3.重新运行并检查。
如果您在代码的其他部分使用日志记录,请更新导入语句: 蟒蛇
导入日志记录#标准日志记录模块#您可以使用新名称