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

读取.bson文件转pandas DataFrame报objsize too large错误如何解决

问题根因

objsize too large报错和数据里的datetime字段、嵌套结构没有关系,90%的场景是两个原因导致:

  • 依赖安装错误:PyPI上独立发布的bson包和MongoDB官方维护的、随pymongo分发的BSON实现完全不兼容,如果你之前执行过pip install bson装了独立第三方bson包,解析标准MongoDB导出的BSON文件时必然出现解析异常。
  • 读取方式问题:bson.decode_all(f.read())会一次性把整个文件读入内存全量解码,遇到大体积文件、文件尾部截断损坏的场景会直接抛出解析错误,没有容错空间。
解决步骤

按顺序操作即可:

  1. 清理冲突依赖,安装正确版本
    先执行命令卸载冲突包,再安装官方维护的依赖:

    pip uninstall -y bson pymongo
    pip install pymongo pandas
    

    注意:安装完pymongo后不要额外单独执行pip install bson,两个包共存会持续触发解析冲突。

  2. 替换为迭代式读取代码
    放弃全量读入+decode_all的写法,改用官方提供的文件迭代解码器,逐文档解析,既支持大文件低内存读取,也能自动跳过部分尾部损坏的片段:

    import pandas as pd
    from bson import decode_file_iter
    
    FILE = "users_(1).bson"
    data = []
    # 逐文档遍历解析BSON文件
    for doc in decode_file_iter(open(FILE, "rb")):
        data.append(doc)
    
    main_df = pd.DataFrame(data)
    # 如需展开嵌套的subscription字段,可执行下面的扁平化处理
    # subscription_cols = pd.json_normalize(main_df["subscription"]).add_prefix("subscription_")
    # main_df = pd.concat([main_df.drop(columns=["subscription"]), subscription_cols], axis=1)
    main_df.describe()
    
  3. 文件完整性校验
    如果执行完前两步仍报错,可通过逐文档计数的方式定位损坏位置:

    from bson import decode_file_iter
    FILE = "users_(1).bson"
    doc_count = 0
    try:
        for _ in decode_file_iter(open(FILE, "rb")):
            doc_count += 1
        print(f"文件全部解析完成,共{doc_count}条文档")
    except Exception as e:
        print(f"解析到第{doc_count + 1}条文档时触发错误:{str(e)},文件在此位置存在截断或格式损坏")
    
BSON转JSON实现

如果需要转成你熟悉的JSON格式处理,自定义序列化规则处理特殊类型即可:

import json
from bson import ObjectId
from datetime import datetime

def custom_serializer(obj):
    if isinstance(obj, ObjectId):
        return str(obj)
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError(f"不可序列化的类型:{type(obj)}")

with open("users_export.json", "w", encoding="utf-8") as f:
    json.dump(data, f, default=custom_serializer, ensure_ascii=False, indent=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:31:05