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

如何用Python拆分字典列表并保存为多个Parquet文件(无需Spark)

不用Spark实现单字典转独立Parquet文件的方案

完全可以不依赖Spark实现需求,用pyarrow或pandas就能直接完成单个字典到独立Parquet文件的转换,以下是具体实现方案:

核心思路

你之前使用的pq.write_to_dataset是按指定列分区生成目录存储,本质是批量数据的分区归档,不符合「每个字典对应单个Parquet文件」的需求。正确的做法是遍历每个字典,将其转换为单行数据集后单独写入文件。

完整代码实现

步骤1:处理单份JSON文件

import json
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
import os

# 1. 读取JSON文件,加载为字典列表
with open("your_data.json", "r", encoding="utf-8") as f:
    dict_list = json.load(f)

# 2. 创建输出目录
output_dir = "single_dict_parquets"
os.makedirs(output_dir, exist_ok=True)

# 3. 遍历每个字典,单独写入Parquet
for idx, item in enumerate(dict_list):
    # 将单个字典转为单行DataFrame
    df = pd.DataFrame([item])
    # 转为pyarrow Table(比pandas直接写入更高效)
    table = pa.Table.from_pandas(df)
    # 生成唯一文件名(用序号+字典内唯一字段如g值命名,避免重复)
    file_name = f"item_{idx}_{item['g']}.parquet"
    file_path = os.path.join(output_dir, file_name)
    # 写入单个Parquet文件
    pq.write_table(table, file_path)

步骤2:批量处理多个JSON文件

如果要处理目录下所有JSON文件,只需在外层增加遍历逻辑:

import glob

# 遍历目录下所有JSON文件
json_files = glob.glob("path_to_json_dir/*.json")

for json_file in json_files:
    with open(json_file, "r", encoding="utf-8") as f:
        dict_list = json.load(f)
    
    # 用原JSON文件名区分输出的Parquet文件
    base_name = os.path.splitext(os.path.basename(json_file))[0]
    for idx, item in enumerate(dict_list):
        df = pd.DataFrame([item])
        table = pa.Table.from_pandas(df)
        file_name = f"{base_name}_item_{idx}_{item['g']}.parquet"
        file_path = os.path.join(output_dir, file_name)
        pq.write_table(table, file_path)

关键细节说明

  • 文件名唯一性:建议使用字典内的唯一标识字段(如示例中的g时间戳)结合序号命名,避免不同字典生成重复文件名。
  • 性能优化:pyarrow的write_table比pandas的df.to_parquet在小文件写入上更高效;如果字典数量极大,可根据实际场景调整单批处理量,但单字典对应单文件的需求下,单条写入是必须的。
  • 字段一致性:确保所有字典的键(字段名)完全一致,否则转换DataFrame时会出现列缺失或额外列的情况,可在转换前统一字段列表规避问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:35:27