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

Spark-Submit使用--py-files提交Zip包时模块导入失败问题排查

解决Spark Submit导入模块失败(ImportError: No module named src.main.com.sss.app1.utils.DBUtils)

以下是排查和解决该问题的具体步骤:

  • 检查Zip包的顶层目录结构
    解压project1.zip,确认顶层目录是project1还是直接包含src、configs等子目录:

    • 如果顶层是project1,那么你的导入语句需要带上project1前缀,比如from project1.src.main.com.sss.app1.utils import DBUtils,因为Spark会将Zip包的顶层目录添加到Python路径中,而非其下的子目录。
    • 若想保留src.main...的导入方式,需要重新打包,将src、configs等目录作为Zip包的顶层,而非嵌套在project1下。
  • 补全所有层级的__init__.py文件
    Python识别包需要每个层级目录都有__init__.py(空文件即可),除了jobs、models、utils,你还需要在src、main、com、sss、app1这些目录下添加该文件,确保整个路径都是合法的Python包结构。

  • 调整Spark Submit命令的路径参数

    • 确保main.py的路径正确:如果main.py在project1/src/main/com/sss/app1/目录下,执行命令时需要指定正确的相对/绝对路径,比如:
      spark-submit --queue fmoapp-queue --py-files project1.zip project1/src/main/com/sss/app1/main.py
      
    • 或者将main.py也打包到Zip包内,直接通过包路径调用。
  • 验证Python路径配置
    在main.py的开头添加代码打印Python路径,确认project1.zip是否被正确加载:

    import sys
    print("当前Python路径:", sys.path)
    

    执行后查看输出,若project1.zip不在路径中,说明--py-files参数未生效,可检查参数拼写或Zip包路径是否正确。

  • 避免相对路径导入的歧义
    若在main.py中使用相对导入(比如from .utils import DBUtils),Spark分布式环境下可能出现路径解析问题,建议改用绝对路径导入,确保Worker节点能正确识别模块位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:02:36