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

保存Spark Dataframe为ADLS Gen1 Delta表前如何预判生成文件数量

写入文件数量预判方法

默认情况下,Spark写入生成的文件数量与DataFrame的分区数一致,你可以在写入前执行以下代码获取当前分区数,即为默认生成的文件数量:

# PySpark 示例
print(df.rdd.getNumPartitions())
// Scala 示例
println(df.rdd.getNumPartitions)

如果使用Delta格式写入,还会受delta.targetFileSize参数影响:当单个分区的数据量超过配置的目标文件大小时,Delta会自动拆分文件,你可以通过「总数据量 ÷ 目标单文件大小」来估算最终的文件数量,建议单文件大小控制在128M~1G区间。

ADLS Gen1最大文件创建配额查询方法

ADLS Gen1的文件创建操作限流阈值和账户配置的*吞吐量单位(TU)*直接挂钩:每个吞吐量单位每秒最多支持100次CREATE操作,你可以通过以下两种方式查询:

  • 登录Azure门户,进入对应ADLS Gen1账户的「性能」配置页,查看当前配置的吞吐量单位总数,乘以100即可得到每秒最大允许的文件创建请求数。
  • 查看Azure Monitor中该ADLS账户的ThrottledRequests指标,筛选操作类型为CREATE的历史记录,也可以反推当前的限流阈值。
问题优化方案

你可以通过以下方式避免CREATE操作限流:

  • 写入前合并DataFrame分区,减少最终生成的文件数量:
    # 合并为10个分区,即最终生成约10个文件,可根据总数据量调整数值
    df = df.coalesce(10)
    
  • 写入时指定Delta目标文件大小,避免自动生成大量小文件:
    df.write.format("delta").mode("overwrite") \
      .option("delta.targetFileSize", "134217728") \ # 128MB
      .saveAsTable("database_name.df", path ='adl://my path to storage')
    
  • 若单次写入的文件量不可缩减,可适当降低写入并行度,或者拆分数据分批次写入,避免短时间内发起大量CREATE请求触达限流阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:57:01