Azure Databricks用户仓库写入CSV失败及路径报错问题咨询
问题原因与解决方法
核心原因
- 路径映射不匹配:你用
pandas.to_csv写入的是集群节点的本地临时文件系统,而非Databricks Workspace中的Git仓库目录。集群本地路径和Workspace仓库路径没有直接关联,所以即使无报错,文件也不会出现在仓库里。 - 目录不存在或路径格式错误:直接使用
/Users/xxx/repo_one/repo_two这类Workspace路径时,集群无法识别该路径(因为集群默认访问DBFS或本地节点存储),导致提示目录不存在。
解决方法
方法1:先写入DBFS,再同步到仓库
- 将CSV写入DBFS的可访问路径(通过集群本地挂载点
/dbfs访问):df_pandas.to_csv('/dbfs/FileStore/test.csv', index=False, header=False) - 使用
dbutils将DBFS中的文件复制到Workspace仓库目录:dbutils.fs.cp("dbfs:/FileStore/test.csv", "/Users/xxx/repo_one/repo_two/test.csv") - 此时文件会出现在你的Git仓库目录中,可直接提交Git变更。
方法2:通过Spark DataFrame直接写入Workspace仓库
如果需要直接写入仓库,可将pandas数据转为Spark DataFrame后写入(Spark支持直接访问Workspace路径):
# 转换pandas DataFrame为Spark DataFrame spark_df = spark.createDataFrame(df_pandas) # 写入单个CSV文件(coalesce(1)合并分区为1) spark_df.coalesce(1).write.mode("overwrite").option("header", "false").csv("/Workspace/Users/xxx/repo_one/repo_two/test_temp") # 将生成的分区文件重命名为目标文件名 import os # 列出临时目录下的CSV文件 csv_files = [f for f in os.listdir('/dbfs/Workspace/Users/xxx/repo_one/repo_two/test_temp') if f.endswith('.csv')] if csv_files: # 重命名文件 dbutils.fs.mv(f"/Workspace/Users/xxx/repo_one/repo_two/test_temp/{csv_files[0]}", "/Workspace/Users/xxx/repo_one/repo_two/test.csv") # 删除临时目录 dbutils.fs.rm("/Workspace/Users/xxx/repo_one/repo_two/test_temp", recurse=True)
方法3:先创建目标目录再写入
如果提示目录不存在,先通过dbutils创建Workspace仓库目录:
dbutils.fs.mkdirs("/Workspace/Users/xxx/repo_one/repo_two")
之后再使用方法1或方法2写入文件。
内容的提问来源于stack exchange,提问作者Gael Bosc
相关产品推荐
相关产品推荐

