VSCode中Jupyter加载超大JSON文件生成DataFrame的方法咨询
单个JSON分卷的分块合并方案
你当前代码返回的是可迭代的JsonReader对象,直接迭代拼接所有分块即可生成单个分卷对应的完整DataFrame,实现代码如下:
import pandas as pd chunk_size = 200000 chunk_iter = pd.read_json("xaa.json", lines=True, chunksize=chunk_size) chunk_list = [] for chunk in chunk_iter: # 可在此处添加数据清洗、删除无用字段的逻辑,降低内存占用 chunk_list.append(chunk) # 合并为单个分卷的完整DataFrame df_single_volume = pd.concat(chunk_list, ignore_index=True)
如果单个2GB分卷合并后内存占用仍然过高,可跳过本步骤,直接采用边读分块边写入数据库的方案,全程无需加载全量数据到内存,完全避免内核崩溃问题。
全部分卷批量入库方案(内存友好)
推荐使用轻量的SQLite数据库,无需额外部署服务,Ubuntu系统原生支持,实现全量数据落地的代码如下:
import pandas as pd import sqlite3 from tqdm import tqdm # 可选,用于显示处理进度,可通过pip install tqdm安装 # 基础配置 chunk_size = 200000 # 按实际拆分的文件名填充列表 json_file_list = ["xaa.json", "xab.json", "xac.json", "xad.json", "xae.json", "xaf.json"] db_path = "sentiment_research.db" # 数据库文件会自动生成在当前目录 table_name = "raw_review_data" # 连接数据库 conn = sqlite3.connect(db_path) for file in tqdm(json_file_list, desc="处理全部分卷"): chunk_iter = pd.read_json(file, lines=True, chunksize=chunk_size) for chunk in tqdm(chunk_iter, desc=f"处理{file}分块", leave=False): # 写入数据库,采用追加模式 chunk.to_sql(table_name, conn, if_exists="append", index=False) # 关闭连接 conn.close()
从数据库读取数据生成DataFrame的方法
import pandas as pd import sqlite3 conn = sqlite3.connect("sentiment_research.db") # 内存足够时读取全量数据生成完整DataFrame df_full = pd.read_sql("SELECT * FROM raw_review_data", conn) # 内存不足时按需读取子集,示例:仅读取2023年的评论数据 # df_subset = pd.read_sql("SELECT * FROM raw_review_data WHERE create_time >= '2023-01-01'", conn) conn.close()
- 入库后可给常用查询字段(如评论时间、领域标签等)创建索引,执行
conn.execute("CREATE INDEX idx_create_time ON raw_review_data(create_time)")即可大幅提升查询速度 - 数据写入前提前过滤情感分析不需要的字段,可降低30%以上的内存和存储占用
- 后续需要做大量聚合统计时,可替换SQLite为DuckDB,查询性能提升5-10倍,同样是本地文件型数据库无需额外部署
内容的提问来源于stack exchange,提问作者Jhonny
相关产品推荐
相关产品推荐

