使用dbutils.fs.cp复制文件时目标路径生成冗余文件夹问题咨询
解决dbutils.fs.cp复制文件时自动创建父目录的问题
问题原因
当使用dbutils.fs.cp复制单个文件,且目标路径以/结尾(表示目录)时,命令会默认保留源文件的父目录结构,将源文件的父文件夹(此处为StudentA)一并复制到目标目录下,导致文件被放在/mnt/Testing_1/StudentA/Test.csv,而非预期的/mnt/Testing_1/Test.csv。
解决方案
方案1:显式指定目标文件的完整路径
直接在目标路径中包含文件名,而非仅指定目录:
dbutils.fs.cp("/mnt/testing/StudentA/Test.csv", "/mnt/Testing_1/Test.csv")
执行后会直接将Test.csv复制到/mnt/Testing_1/目录下,不会创建额外的StudentA文件夹。
方案2:动态获取文件名拼接目标路径
如果需要批量处理文件或不想硬编码文件名,可以通过字符串操作提取源文件名,再拼接目标路径:
source_file = "/mnt/testing/StudentA/Test.csv" # 提取文件名 file_name = source_file.split("/")[-1] # 拼接目标路径 target_file = f"/mnt/Testing_1/{file_name}" # 执行复制 dbutils.fs.cp(source_file, target_file)
补充说明
dbutils.fs.cp的这个行为和Unix系统的cp命令存在差异:Unix中cp source_file target_dir/会直接将文件放入目标目录,但Databricks的dbutils.fs.cp会保留源文件的相对父目录层级,因此必须显式指定目标文件名才能达到预期效果。
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

