You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks中用Spark生成指定文件名的单个CSV文件?

在Databricks生成单个CSV文件的解决方法

Spark默认生成多个分区文件和作业状态文件,是因为它是分布式计算框架,数据会被拆分到多个节点并行处理,你指定的输出路径会被创建成文件夹,里面包含各节点输出的part文件和作业标识文件(_committed_xxx、_SUCCESS等)。要得到单个CSV文件,可参考以下几种方案:

方案1:合并分区后输出再改名

先将DataFrame合并为1个分区,写入临时路径后,把生成的单个part文件改名成目标文件,最后清理临时文件。注意:如果数据量极大,合并到单个分区可能导致节点内存溢出,仅适合小数据量场景。

# 临时输出路径
temp_path = "dbfs:/mnt/target_folder/temp_single_csv"
# 合并为1个分区后写入临时路径
df.coalesce(1).write.mode("overwrite").csv(temp_path, header=True)

# 找到临时路径下的part文件
part_files = [file for file in dbutils.fs.ls(temp_path) if file.name.startswith("part-")]
if part_files:
    # 移动并重命名为目标文件
    dbutils.fs.mv(part_files[0].path, "dbfs:/mnt/target_folder/file.csv")
    # 删除临时路径
    dbutils.fs.rm(temp_path, recurse=True)

方案2:修复pandas.to_csv的报错问题

你遇到的OSError: Cannot save file into a non-existent directory(错误:无法将文件保存到不存在的目录),是因为目标目录不存在或者路径格式不对。Databricks中DBFS路径dbfs:/xxx对应本地文件系统的/dbfs/xxx,按以下方式处理即可:

# 先创建目标目录(如果不存在)
target_dir = "dbfs:/mnt/target_folder/"
dbutils.fs.mkdirs(target_dir)

# 将Spark DataFrame转为pandas DataFrame
pdf = df.toPandas()

# 使用DBFS的本地映射路径写入CSV
pdf.to_csv("/dbfs/mnt/target_folder/file.csv", index=False, header=True)

方案3:直接合并已生成的分区文件

如果已经生成了包含多个part文件的文件夹,可直接合并这些part文件为单个CSV:

input_folder = "dbfs:/mnt/target_folder/existing_csv_folder"  # 原输出文件夹
output_file = "dbfs:/mnt/target_folder/file.csv"

# 合并所有part文件到目标文件
dbutils.fs.cp(f"{input_folder}/part-*", output_file, recurse=True)

# 删除原文件夹
dbutils.fs.rm(input_folder, recurse=True)

内容的提问来源于stack exchange,提问作者hh54188

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:02:38