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

Spark-ftp写入DataFrame至FTP异常:生成.crc文件而非.csv求助

解决Spark FTP写入生成.crc二进制文件的问题

我之前在做Spark FTP数据导出的时候也踩过几乎一模一样的坑,结合你给出的日志和问题描述,咱们来一步步解决:

问题根源拆解

  1. .crc文件的由来:这是Spark默认的FileOutputCommitter生成的校验文件,用来验证输出文件的完整性,默认情况下会和目标文件一起生成。
  2. 二进制格式问题:大概率是你没有明确指定输出为CSV文本格式,或者使用的FTP库默认用了二进制序列化方式写入,导致文本文件被当成二进制存储。
  3. 本地临时路径日志:说明你的Spark FTP写入底层是先把数据写到本地临时目录,再同步到远程FTP服务器,这时候如果没过滤掉临时文件和校验文件,就会一起上传到FTP。

针对性解决方案

1. 禁用CRC校验文件生成

直接通过Spark配置关闭校验文件的生成,这样就不会再出现part-XXX..csv.crc这类文件了:

// 在代码中设置配置
spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
spark.conf.set("spark.hadoop.mapreduce.fileoutputformat.outputdir", "ftp://your-ftp-server/target-path")

// 或者在Spark启动时添加JVM参数
// spark-submit --conf mapreduce.fileoutputcommitter.marksuccessfuljobs=false ...

2. 明确指定CSV输出格式

不管你用的是官方CSV writer还是第三方spark-ftp库,都要明确指定输出为CSV文本格式:

官方CSV写入+FTP路径

df.write
  .format("csv")
  .option("header", "true") // 如果需要导出表头
  .option("delimiter", ",")
  .mode(org.apache.spark.sql.SaveMode.Overwrite)
  .save("ftp://username:password@your-ftp-server/target-folder")

第三方spark-ftp库(比如springml)

df.write
  .format("com.springml.spark.sftp")
  .option("host", "your-ftp-server")
  .option("username", "your-username")
  .option("password", "your-password")
  .option("fileType", "csv") // 强制指定文件类型为CSV
  .option("header", "true")
  .mode(org.apache.spark.sql.SaveMode.Overwrite)
  .save("/target-folder-on-ftp")

3. 优化临时文件处理

从日志看Spark先写本地临时目录再同步到FTP,你可以指定自定义临时目录,或者配置库直接写入远程:

// 用springml库指定自定义临时目录,方便后续清理
df.write
  .format("com.springml.spark.sftp")
  .option("host", "your-ftp-server")
  .option("username", "your-username")
  .option("password", "your-password")
  .option("tempDir", "/your-local-temp-path")
  .option("fileType", "csv")
  .mode(org.apache.spark.sql.SaveMode.Overwrite)
  .save("/target-folder")

如果还是有残留文件,写入完成后可以手动清理临时目录里的.crc和临时文件。

额外排查建议

  • 确认Spark版本和你使用的spark-ftp库版本兼容(比如Spark 3.x需要用对应版本的库)
  • 检查FTP服务器的传输模式,确保用的是ASCII模式而不是二进制模式传输文本文件
  • 查看完整的Spark日志,有没有被忽略的警告信息,比如格式转换失败的提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:12:40