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

通过Databricks读取ADLS Gen2多文件夹数据生成单目标文件的实现方法

Databricks 合并ADLS Gen2多分区Parquet为单文件方案

步骤1:读取全量Parquet数据

假设你已创建的ADLS Gen2挂载点路径为/mnt/<你的挂载点名称>,目录结构为按年月分层(支持Hive分区格式/year=2023/month=10/或普通年月格式/2023/10/):

# 替换为你的实际挂载点根路径
base_path = "/mnt/替换为你的挂载点名称"

# 写法1:适配任意年月目录结构,递归读取所有parquet文件
df = spark.read.option("recursiveFileLookup", "true").parquet(base_path)

# 写法2:如果目录是Hive分区命名(年=xxxx/月=xx 或 year=xxxx/month=xx),可自动识别分区为数据列
# df = spark.read.parquet(base_path)

如果需要从非Hive格式的路径中提取年月作为列,可新增如下逻辑:

from pyspark.sql.functions import input_file_name, split

df = df.withColumn("file_path", input_file_name()) \
       .withColumn("year", split(split(df["file_path"], "/")[3], "=")[1]) \
       .withColumn("month", split(split(df["file_path"], "/")[4], "=")[1])

步骤2:输出单个全量文件

利用coalesce(1)将分布式数据合并为单分区后输出:

# 替换为你的目标输出路径,建议放在ADLS挂载目录下
output_path = "/mnt/替换为你的挂载点名称/合并后全量数据"

# 输出为parquet格式,可替换为csv等其他格式,csv可加.option("header","true")保留表头
df.coalesce(1).write.mode("overwrite").parquet(output_path)

输出目录下名称以part-00000开头的parquet文件即为合并后的全量单文件,同目录下的_SUCCESS、CRC校验文件为Spark输出标记文件,无需使用可直接删除。

注意事项

  • 若全量数据规模过大(超过10G)不建议强行输出单文件,会大幅增加读写耗时和Driver节点内存压力,优先保留多分区存储更适合大数据场景
  • 如需仅合并指定时段数据,可读取完成后添加过滤条件,示例:df.filter((df.year == 2023) & (df.month >= 6))即可仅合并2023年下半年数据
  • 单文件输出后可根据业务需求重命名为固定名称,方便后续读取调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:08