Databricks集群CatBoost指定预创建train_dir仍报无法创建工作目录如何解决
报错原因
- 路径格式错误:CatBoost作为第三方原生库,无法识别Databricks的
dbfs/协议头路径,必须通过DBFS FUSE挂载的/dbfs/前缀路径才能访问存储,你传入的dbfs/FileStore/files/对CatBoost而言是本地相对路径,没有写入权限自然无法创建目录。 - 子目录创建权限被限制:就算传入的根目录有访问权限,CatBoost默认会在指定的
train_dir下自动生成带随机后缀的子目录存储训练快照、临时日志等文件,集群安全策略禁止用户自行创建子目录的情况下,依然会触发创建失败错误。
解决方法
- 第一步修正路径格式:将传入的路径改为
/dbfs/FileStore/files/,修改后的初始化代码如下:
可以先执行CatBoostClassifier(train_dir='/dbfs/FileStore/files/')os.listdir('/dbfs/FileStore/files/')验证路径可正常访问,排除路径本身的权限问题。 - 如果修正路径后仍报错,可添加
allow_writing_files=False参数直接禁用CatBoost的临时文件写入逻辑,不会触发任何目录创建操作,适合中小数据集训练场景:CatBoostClassifier( train_dir='/dbfs/FileStore/files/', allow_writing_files=False ) - 大数据集训练必须依赖临时文件落盘的场景,可联系集群管理员为你指定的
train_dir开通子目录创建权限,或是让管理员预先为你创建好专属的训练子目录,你直接指定到该子目录同时添加save_snapshot=False参数关闭自动快照写入,避免CatBoost生成新的子目录。
内容的提问来源于stack exchange,提问作者Jagmohan Dhiman
相关产品推荐
相关产品推荐

