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

Databricks保存PySpark DataFrame到本地报Job aborted错如何解决

Databricks导出10000行DataFrame到本地CSV报Job aborted解决方案

问题复现

执行如下导出代码时抛出org.apache.spark.SparkException: Job aborted.错误:

df_test.coalesce(1).write.csv("dbfs:/FileStore/tables/df_test", header=True, mode='overwrite')

目标是将10000行的DataFrame下载到本地设备。


优先推荐方案(适配10000行小数据量)

10000行数据体积极小,完全不需要走Spark分布式写入流程,直接将数据拉取到驱动节点转pandas生成单文件即可,从根源规避分布式写入的任务失败问题:

# 拉取数据到驱动节点转pandas DataFrame
pdf = df_test.toPandas()
# 直接写入DBFS路径生成单CSV文件
pdf.to_csv("/dbfs/FileStore/tables/df_test/df_test_final.csv", index=False)

写入完成后直接在DBFS文件浏览器找到对应文件点击下载即可。


其他报错场景对应修复方案

如果因为集群配置限制无法使用pandas写入,可根据具体报错原因选择对应修复方式:

  • 问题1:coalesce(1)单节点内存不足
    coalesce(1)不会做数据shuffle,强制把所有数据压到上游同一个Executor处理,当字段包含长文本、嵌套结构时很容易超出单节点内存阈值触发任务失败。
    修复方式:

    1. 替换coalesce(1)为repartition(1),触发全量shuffle做数据均衡,单分区写入稳定性更高:
      df_test.repartition(1).write.csv("dbfs:/FileStore/tables/df_test", header=True, mode='overwrite')
      
    2. 如果单分区写入始终失败,先取消单分区合并写入,后续再合并分片文件:
      # 先按默认分区写入
      df_test.write.csv("dbfs:/FileStore/tables/df_test_raw", header=True, mode='overwrite')
      
      写入完成后通过shell命令合并分片,自动处理重复表头问题:
      %sh
      # 创建目标目录
      mkdir -p /dbfs/FileStore/tables/df_test
      # 提取第一个分片的表头写入最终文件
      head -n 1 $(ls /dbfs/FileStore/tables/df_test_raw/part-*.csv | head -1) > /dbfs/FileStore/tables/df_test/df_test_final.csv
      # 追加所有分片的内容(跳过每个分片的表头行)
      tail -n +2 -q /dbfs/FileStore/tables/df_test_raw/part-*.csv >> /dbfs/FileStore/tables/df_test/df_test_final.csv
      
  • 问题2:写入路径权限异常/残留锁文件
    /FileStore/tables是公共路径,之前写入失败残留的临时文件、锁文件,或者集群账号权限不足都会触发任务中止。
    修复方式:

    1. 写入前强制递归清理目标路径:
      dbutils.fs.rm("dbfs:/FileStore/tables/df_test", recurse=True)
      
    2. 更换写入路径到个人临时目录,避开公共路径权限冲突,比如写入dbfs:/tmp/你的用户名/df_test。
  • 问题3:特殊字符导致CSV写入解析失败
    字段中存在未转义的换行符、引号、分隔符时,CSV写入器解析失败会触发任务中止。
    修复方式:写入时增加特殊字符转义配置:

    df_test.repartition(1).write.csv(
      path = "dbfs:/FileStore/tables/df_test",
      header = True,
      mode = "overwrite",
      quote = '"',
      escape = '"',
      multiLine = True
    )
    

本地下载注意事项

文件写入DBFS完成后,执行如下命令列出目标路径文件,点击对应CSV文件旁的下载按钮即可保存到本地:

display(dbutils.fs.ls("dbfs:/FileStore/tables/df_test"))

内容的提问来源于stack exchange,提问作者valentim.kodak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:15:11