如何用Python&Pandas将目录中JSON文件批量转为独立Parquet文件
JSON转独立Parquet文件批量处理方案
两种处理方式对比
- 遍历DataFrame处理:路径已统一存储,方便后续做过滤、统计等二次操作;但多了一次路径存储的步骤,大文件量场景会占用少量额外内存,普通场景无影响。
- 遍历目录时直接处理:无需额外存储路径,一步完成遍历与转换,效率更高;但如果后续需要复用路径列表,需要重新遍历目录。
批量转换实现(不合并文件)
方式1:遍历目录时直接处理(推荐)
这种方式无需额外存储路径列表,效率更高,适合大多数场景:
import os import pandas as pd path = 'trackingdata/' for root, dirs, files in os.walk(path, topdown=False): for name in files: # 仅处理JSON格式文件,避免无关文件干扰 if name.endswith('.json'): json_full_path = os.path.join(root, name) # 生成对应Parquet文件路径(替换后缀即可) parquet_full_path = os.path.splitext(json_full_path)[0] + '.parquet' # 读取JSON文件 # 若为JSON Lines格式(每行一个JSON对象),需添加lines=True参数 df = pd.read_json(json_full_path) # 写入Parquet,关闭索引写入以节省空间 df.to_parquet(parquet_full_path, index=False) print(f"转换完成:{json_full_path} -> {parquet_full_path}")
方式2:遍历存储路径的DataFrame处理
如果已经有存储路径的DataFrame,可直接遍历转换:
import os import pandas as pd path = 'trackingdata/' # 收集所有JSON文件路径到DataFrame file_list = [] for root, dirs, files in os.walk(path, topdown=False): for name in files: if name.endswith('.json'): file_list.append(os.path.join(root, name)) df_paths = pd.DataFrame(file_list, columns=['json_path']) # 遍历DataFrame完成转换 for _, row in df_paths.iterrows(): json_path = row['json_path'] parquet_path = os.path.splitext(json_path)[0] + '.parquet' df = pd.read_json(json_path) df.to_parquet(parquet_path, index=False) print(f"转换完成:{json_path} -> {parquet_path}")
关键注意事项
- 必须添加JSON格式过滤:避免处理目录中的非JSON文件(如临时文件、隐藏文件)
- 索引处理:
index=False可避免将DataFrame的行索引写入Parquet,减少冗余数据 - 特殊JSON格式支持:如果是JSON Lines格式(每行一个独立JSON对象),读取时需传入
lines=True参数 - 性能优化:大文件场景可指定
engine='pyarrow'或engine='fastparquet'提升读写效率
内容的提问来源于stack exchange,提问作者stained
相关产品推荐
相关产品推荐

