Dataproc Serverless提交Spark作业遇archives文件找不到错误求助
Dataproc Serverless Spark作业配置文件路径问题解决
问题原因
使用--archives传入zip文件时,Dataproc Serverless默认会将压缩包解压到与包名同名的目录(去除.zip后缀),若未显式指定解压目标路径,会导致代码中的相对路径无法匹配到实际文件位置。
解决方案
1. 修改--archives参数,指定解压目标路径
在提交命令中通过#符号为压缩包指定解压后的目标目录,确保代码中的相对路径能正确访问配置文件:
gcloud dataproc batches submit pyspark src/mapper.py \ --project=$PROJECT_ID \ --region=$REGION \ --deps-bucket=$DEPS_BUCKET \ --container-image=$CONTAINER_IMAGE \ --service-account=$SERVICE_ACCOUNT \ --subnet=$SUBNETWORK_URI \ --py-files=dist/src.zip \ --archives=dist/config.zip#config \ -- --arg1="value1"
添加#config后,config.zip会被直接解压到作业工作目录下的config文件夹中,代码里的config/config.yaml路径即可正确找到文件。
2. 确认压缩包内部结构
确保config.zip的内部结构与代码读取路径匹配:
- 若代码读取
config/config.yaml,压缩包内可以是:- 直接包含
config.yaml文件(#config会将文件放入config目录) - 已包含
config文件夹,文件夹内存放config.yaml(#config会将整个config文件夹解压到工作目录)
- 直接包含
3. 调试用:代码中验证路径
如果仍有问题,可在代码中打印当前工作目录,确认文件位置:
import os print("Current working directory:", os.getcwd()) # 用绝对路径尝试读取 config_path = os.path.join(os.getcwd(), "config/config.yaml") with open(config_path, "r") as f: COUNTRY_CODES = yaml.load(f, yaml.SafeLoader)
内容的提问来源于stack exchange,提问作者Tom J Muthirenthi
相关产品推荐
相关产品推荐

