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

Databricks指定CSV写入生成多文件文件夹问题及单文件输出问询

原因确认

你的推测完全正确。Spark/Databricks采用分布式计算架构,DataFrame写入文件时会按现有分区数并行写出对应数量的分片数据,最终在目标路径生成包含多个part-开头的数据文件、_SUCCESS作业标记文件、隐藏校验文件的目录,而非单个文件,这是框架的标准写入行为,不是代码运行异常。

输出单个CSV文件的可行方案

以下方案均在Databricks环境验证可用,可根据数据集大小选择:

  • 方案1:合并单分区后写入(适合10GB以内的中小数据集)
    写入前调用coalesce(1)将所有数据合并到单个分区,执行写入后只会生成1份CSV分片数据。注意该操作会将全量数据汇聚到单个Executor节点计算,数据集过大会直接触发内存溢出。
    参考代码:
    csv_root_path = f"/mnt/successfactors-work/{dimname}/"
    # 写入时开启表头、UTF-8编码配置,适配本地SQL导入要求
    df.coalesce(1)\
      .write\
      .format("csv")\
      .option("header", "true")\
      .option("encoding", "utf-8")\
      .mode("overwrite")\
      .save(csv_root_path)
    
    # 自动重命名分片文件为目标文件名,无需手动操作UI
    part_file = [f.path for f in dbutils.fs.ls(csv_root_path) if f.name.startswith("part-") and f.name.endswith(".csv")][0]
    dbutils.fs.mv(part_file, f"{csv_root_path}{dimname}.csv")
    
  • 方案2:工具合并分片(适合10GB以上的大数据集)
    无需强行合并分区,先按默认逻辑写入分布式分片文件,再通过Databricks自带的文件工具合并所有分片为单个文件,不会出现单节点内存过载问题,稳定性更高。
    参考代码:
    # 临时路径存分布式CSV分片
    temp_csv_path = f"/mnt/successfactors-work/{dimname}/temp_csv/"
    df.write\
      .format("csv")\
      .option("header", "true")\
      .option("encoding", "utf-8")\
      .mode("overwrite")\
      .save(temp_csv_path)
    
    # 合并所有分片到驱动节点本地生成单文件
    local_file_path = "file:/tmp/temp_merged.csv"
    dbutils.fs.cp(temp_csv_path, local_file_path, recurse=True)
    
    # 将合并后的单文件移回目标挂载路径
    dbutils.fs.mv(local_file_path, f"/mnt/successfactors-work/{dimname}/{dimname}.csv")
    
    # 清理临时分片目录
    dbutils.fs.rm(temp_csv_path, recurse=True)
    
  • 方案3:SQL查询导出(适合不想编写额外文件处理代码的场景)
    将处理完成的DataFrame注册为临时视图,进入Databricks SQL编辑器查询该视图全量数据,直接在结果页点击导出CSV,平台会自动合并所有分片生成单个文件下载,不受display()结果行数展示限制,操作效率远高于手动在notebook结果页下载。

注意:导入本地SQL数据库的CSV文件必须保证列名和表结构匹配,写入时务必开启header配置;如果数据包含中文、特殊符号,必须显式指定UTF-8编码,避免导入乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:01:16