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

如何用Spark将多行Dataset<String>写入单个TXT文件

解决Spark写入Dataset时生成多个文件的问题

Spark作为分布式计算框架,会根据Dataset的分区数量生成对应个数的输出文件——哪怕你只有3行数据,只要分区数大于1,就会产出多个小文件。要合并成单个文件,有两种常用方案:

方案一:合并分区后写入

直接通过coalesce(1)或repartition(1)将Dataset的分区数强制改为1,再执行写入操作:

  • coalesce(1):不会触发数据shuffle,只是将现有分区的数据合并到一个分区,适合小数据量场景(比如你的3行数据),性能更好:
input.coalesce(1).write().mode(SaveMode.Overwrite).text("src/main/resources/avro/BVA_RET_20210618")
  • repartition(1):会强制触发数据shuffle,把所有数据重新分配到一个分区,数据量小时和coalesce效果一致,但数据量大时可能带来额外开销。

方案二:全局设置分区数(不推荐)

如果你的整个Spark作业只需要处理这一个写入任务,可以在创建SparkSession时全局设置shuffle分区数为1:

SparkSession spark = SparkSession.builder()
    .appName("WriteSingleTxtFile")
    .config("spark.sql.shuffle.partitions", "1")
    .getOrCreate();

之后再执行原写入代码即可。但这个设置会影响作业中所有需要shuffle的操作,除非必要不建议使用。

注意:合并成单个文件后,输出的文件名会是类似part-00000-xxxxxx-c000.txt的格式,Spark本身不支持直接指定输出文件名,若需要固定名称,可在写入完成后手动重命名文件。

内容的提问来源于stack exchange,提问作者patrick pascoal ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:40:43