py4j 和 pyspark.sql.types 上的循环导入

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

我是 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上运行代码。我的解释器也指向虚拟环境的解释器。 directory structure

有什么想法可能会导致循环导入问题吗?

pyspark virtualenv py4j
1个回答
0
投票

这可能是因为 Python 文件的名称

logging.py
与 Python 标准库日志记录模块之间存在冲突。当您尝试导入 pyspark.sql(在内部导入日志记录)时,Python 会感到困惑并最终导入您的logging.py 文件而不是标准库日志记录模块。这会导致导入不完整或损坏,从而导致循环导入错误。

尝试几个步骤并检查是否有效:

1.将文件logging.py重命名为其他名称(例如spark_logging.py)

2.删除.pyc文件和pycache:重命名文件后,删除项目中的所有logging.pyc文件和pycache目录(如果存在)。您通常可以在与logging.py相同的目录中找到它们。

3.重新运行并检查。

  1. 如果您在代码的其他部分使用日志记录,请更新导入语句: 蟒蛇

    导入日志记录#标准日志记录模块#您可以使用新名称

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