pandas保存分区parquet文件时能否自定义各分区的输出文件名?
pandas写入分区Parquet自定义文件名方案
原生pandas的to_parquet接口没有提供自定义分区内文件名的参数,默认生成的随机UUID文件名无法直接通过参数修改。你可以通过手动拆分分区、逐分区指定文件名写入的方式实现需求,具体实现如下:
实现思路
- 先按分区字段对全量DataFrame做分组
- 逐组构造符合分区规则的目录路径、自定义文件名
- 每个分组单独写入对应路径,保证目录结构和原生分区格式完全兼容
完整代码示例
import pandas as pd import os # 构造测试数据 df = pd.DataFrame(data={'year': [2020, 2020, 2021], 'month': [1,12,2], 'day': [1,31,28], 'value': [1000,2000,3000]}) # 根输出目录 root_path = './output' # 按分区字段分组遍历 for (year, month), part_df in df.groupby(['year', 'month']): # 构造分区目录,和原生to_parquet生成的目录规则完全一致 part_dir = os.path.join(root_path, f'year={year}', f'month={month}') os.makedirs(part_dir, exist_ok=True) # 自定义文件名,月份自动补前导零 file_name = f'{year}_{month:02d}.parquet' # 写入指定路径 part_df.to_parquet(os.path.join(part_dir, file_name), index=False)
输出效果
运行后生成的文件路径和你要求的完全一致:
output/year=2020/month=1/2020_01.parquet output/year=2020/month=12/2020_12.parquet output/year=2021/month=2/2021_02.parquet
注意事项
- 单个分区数据量较大需要拆分为多个文件时,可以在自定义文件名中加序号后缀,比如
2020_01_001.parquet、2020_01_002.parquet - 生成的分区结构完全兼容pandas、pyspark等工具的分区读取逻辑,直接调用
pd.read_parquet('./output')即可正常读取所有数据 - 超大数据量场景下可以直接调用pyarrow的底层接口做定制,性能比逐分组写入更高
内容的提问来源于stack exchange,提问作者bigdataadd
相关产品推荐
相关产品推荐

