在 python 中处理大型 JSON 数据

Posted

技术标签:

【中文标题】在 python 中处理大型 JSON 数据【英文标题】:Handling with large JSON data in python 【发布时间】:2020-04-26 16:03:05 【问题描述】:

我的 JSON (~500mb) 文件有多个 JSON 对象,实际上我只需要使用“customer_id”列。当我执行下面的代码时,它会给出内存错误。

with open('online_pageviews.json') as f:
     online_pageviews = pd.DataFrame(json.loads(line) for line in f)

这是“online_pageviews.json”中 JSON 对象的示例


"date": "2018-08-01",
"visitor_id": "3832636531373538373137373",
"deviceType": "mobile",
"pageType": "product",
"category_id": "6365313034",
"on_product_id": "323239323839626",
"customer_id": "33343163316564313264"

有没有办法只使用“customer_id”列? 我该怎么做才能加载这个文件?

【问题讨论】:

你试过使用pandas.read_json吗? 它也会出现内存错误 【参考方案1】:

如果您管理实际浮动的数据量,您应该能够做到这一点。由于您需要客户 ID,因此无需费心将任何其他数据加载到您的数据框中。

customer_id_array = []
with open('online_pageviews.json') as f:
    for line in f:
        customer_id_array.append(json.loads(line)['customer_id'])
online_pageviews = pd.DataFrame(customer_id_array,columns = ['customer_id'])

这样可以显着减少以前使用的额外内存。

(我不确定您的系统是否能够处理此问题,因为 customer_id_array 仍然可以变得相当大,但应该比以前好得多。如果不能,您可能需要寻找一些在线选项来租用系统更多内存。)

【讨论】:

这是基于 JSON 对象位于不同行的假设。 @neurite 是的,但您从提供的示例代码中知道

以上是关于在 python 中处理大型 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]

Pandas json_normalize 无法在 Python 中使用大型 JSON 文件

Python处理CSVJSON和XML数据的简便方法

(预)处理存储在 json 中的大型数据集的最有效方法是啥?

将大型 Twitter JSON 数据 (7GB+) 加载到 Python 中

python操作:json文件中存在NumberInt(0),没有引号,无法解析?