如何通过Parquet文件结构判断是分区文件还是独立文件(Databricks+ADLS Gen2)
关于ADLS Gen2中Parquet文件结构的判断与Databricks读取说明
结构本质解读
你给出的entity/year/month/day/层级是目录式数据分区结构,目录下的part-*.snappy.parquet是同一个逻辑数据集的分片文件,并非独立文件。整个day目录下的所有part-开头文件属于同一份完整数据集,配合_success、_committed、_started这些文件来看,这是一次Spark分布式写入作业的产物:
_success:标记本次写入作业成功完成_committed/_started:记录Spark作业的提交、启动元数据part-*.snappy.parquet:因分布式写入被拆分的数据分片,所有分片共同组成一份完整的数据集,不是各自独立的文件
判断依据
- 元文件特征:存在
_success、_committed这类文件,说明是批量写入的分片结果,而非零散的独立文件 - 文件命名规则:统一的
part-前缀+序号,是Spark等分布式框架写入Parquet时的标准分片命名,这类分片必然属于同一个逻辑数据集 - 目录分区含义:
year/month/day是按时间维度设置的数据分区,每个day目录下的所有part-*文件是该时间分区下的完整数据,并非单个文件的分区
Databricks读取操作
在Databricks中,直接读取对应层级目录即可,Spark会自动识别分片文件和分区信息:
# 读取整个entity目录,自动识别year/month/day作为分区列 df = spark.read.parquet("/mnt/adls/entity") # 读取指定日期的分区数据 df = spark.read.parquet("/mnt/adls/entity/year=2024/month=05/day=20")
读取后Spark会自动合并所有part-*分片为一个DataFrame,同时如果是分区写入的场景,year、month、day会自动作为列添加到DataFrame中。
内容的提问来源于stack exchange,提问作者archjkeee
相关产品推荐
相关产品推荐

