Databricks Spark Submit使用--py-files时多文件加载失败问题
首先明确:Spark的--py-files参数完全支持同时指定多个跨路径的文件,不存在只读取前两个的限制,你的问题大概率出在参数格式、路径权限或者模块引用上。
以下是具体排查和解决方法:
检查--py-files的参数分隔格式
多个文件必须用逗号(,)无空格分隔,正确写法示例:--py-files s3://bucket/path/file1.py,s3://other-bucket/path/common.py,s3://bucket/path/main.py如果用空格分隔,Spark会把空格后的内容识别为独立参数,而非--py-files的一部分,直接导致后面的文件被忽略,日志自然只显示前两个。
验证common.py的S3路径权限
确认Databricks集群的IAM角色有该S3路径的读取权限,包括桶策略和对象权限。如果权限不足,Spark会静默跳过该文件加载,日志里不会显示,但运行时就会报模块找不到。检查模块引用方式
确保main.py里引用common的写法是import common,不要带路径前缀(比如from s3.path import common)。因为--py-files中的文件会被自动加入Python的sys.path,直接用模块名引用即可。核对完整的Spark Submit命令
在Databricks任务日志里找到完整的Spark Submit命令行,确认--py-files参数是否完整包含三个文件。有时候配置界面的输入可能因为换行、空格被截断,导致参数不完整。临时打包测试定位问题
把三个文件打包成一个zip(注意zip内部不要嵌套多余目录),用--py-files指定这个zip。如果运行正常,说明是多文件参数格式的问题;如果还是报错,就重点排查common.py的内容或路径权限。
内容的提问来源于stack exchange,提问作者Chuck

