Python 将一个3.7GB的大json文件加载到dataframe中,并使用ijson转换为csv文件
我有一个3.7gb的大json数据文件。我将把json文件加载到dataframe并删除未使用的列,然后将其转换为csv并加载到sql。 内存是40gb 我的json文件结构Python 将一个3.7GB的大json文件加载到dataframe中,并使用ijson转换为csv文件,python,django,database,sqlite,ijson,Python,Django,Database,Sqlite,Ijson,我有一个3.7gb的大json数据文件。我将把json文件加载到dataframe并删除未使用的列,然后将其转换为csv并加载到sql。 内存是40gb 我的json文件结构 {"a":"Ho Chi Minh City, Vietnam","gender":"female","t":"841675194476","id":"10001299850
{"a":"Ho Chi Minh City, Vietnam","gender":"female","t":"841675194476","id":"100012998502085","n":"Lee Mến"}
{"t":"84945474479","id":"100012998505399","n":"Hoàng Giagia"}
{"t":"841679770421","id":"100012998505466","n":"Thoại Mỹ"}
我尝试加载数据,但由于内存不足而失败
data_phone=[]
with open('data.json', 'r', encoding="UTF-8") as f:
numbers = ijson.items(f, 't',multiple_values=True)
for num in numbers :
data_phone.append(num)
它显示错误
Out of memory
我尝试另一种方法
导入json
fb_data={}
i=1
然后我将csv转换为sql,它仍然显示错误“MemoryError:”
感谢阅读您的建议是:
- 步骤1读取json文件
- 步骤2加载到数据帧
- 步骤3将文件另存为csv
- 步骤4将csv加载到sql
- 步骤5将数据加载到django以进行搜索
data\u phone
,data\u name
),这些列表会随着时间的推移而增加
对于大型文件,您应该尝试以下方法:
- 步骤1读取json
- 逐行
- 不要将任何数据保存到全局列表中
- 将数据直接写入SQL
- 步骤2向数据库添加索引
- 步骤3使用django中的SQL
import json
with open('output.csv', 'w') as csv_file:
with open("Vietnam_Facebook_Scrape.json", encoding="UTF-8") as json_file:
for line in json_file:
data = json.loads(line)
csv_file.write(';'.join([data['id'], data['t']]))
这里有一个问题可能会帮助您()逐行写入数据库
如果您想改为使用CSV,请确保用于将CSV转换为SQL的程序不会读取整个文件,而是逐行或成批对其进行分析。您的建议是:
- 步骤1读取json文件
- 步骤2加载到数据帧
- 步骤3将文件另存为csv
- 步骤4将csv加载到sql
- 步骤5将数据加载到django以进行搜索
data\u phone
,data\u name
),这些列表会随着时间的推移而增加
对于大型文件,您应该尝试以下方法:
- 步骤1读取json
- 逐行
- 不要将任何数据保存到全局列表中
- 将数据直接写入SQL
- 步骤2向数据库添加索引
- 步骤3使用django中的SQL
import json
with open('output.csv', 'w') as csv_file:
with open("Vietnam_Facebook_Scrape.json", encoding="UTF-8") as json_file:
for line in json_file:
data = json.loads(line)
csv_file.write(';'.join([data['id'], data['t']]))
这里有一个问题可能会帮助您()逐行写入数据库
如果您想改为使用CSV,请确保用于将CSV转换为SQL的程序不会读取整个文件,而是逐行或批量解析它。ijson的存在正是为了实现这一目的,但是,如果您向我们展示json数据的格式,我们会更容易帮助您为什么需要创建列表和数据框?@joao我只是更新了我的数据结构。我可以处理同样的问题,一个json文件有500mb,但大文件是3.7gb,它显示error@juanpa.arrivillaga我的最终目的是将数据加载到django。步骤1读取json文件,步骤2加载到dataframe,步骤3将文件另存为csv,步骤4将csv加载到sql,步骤5将数据加载到django以search@DinhTruongAnhPhuong这并没有回答我的问题。为什么它需要是数据帧或列表?您正试图最终编写一个csv文件。只需在迭代json时创建csv文件。ijson的存在正是为了实现这一目的,但如果您向我们展示json数据的格式,则会更容易帮助您为什么需要创建列表和数据帧?@joao我只需更新我的数据结构。我可以处理同样的问题,一个json文件有500mb,但大文件是3.7gb,它显示error@juanpa.arrivillaga我的最终目的是将数据加载到django。步骤1读取json文件,步骤2加载到dataframe,步骤3将文件另存为csv,步骤4将csv加载到sql,步骤5将数据加载到django以search@DinhTruongAnhPhuong这并没有回答我的问题。为什么它需要是数据帧或列表?您正试图最终编写一个csv文件。只需在迭代json时创建csv文件。您能告诉我更多关于直接将数据写入csv的信息吗。我试图搜索,但找不到任何结果。我尝试搜索将ijson解析转换为csv。为我的错误道歉knowledge@DinhTruongAnhPhuong:没必要道歉。你在问有趣的问题。我更新了我的答案,我更新了我的代码。请检查它,更新我的代码作为您的答案后,我从csv转换为sqlite,但它仍然显示内存错误。请帮帮我@EricDuminil@DinhTruongAnhPhuong你的最后一个例子看起来不错。您知道在脚本崩溃之前db文件会变大多少吗?如果没有其他办法,你可能想试试postgres或mariadb。你能告诉我更多关于直接将数据写入csv的信息吗。我试图搜索,但找不到任何结果。我尝试搜索将ijson解析转换为csv。为我的错误道歉knowledge@DinhTruongAnhPhuong:没必要道歉。你在问有趣的问题。我更新了我的答案,我更新了我的代码。请检查它,更新我的代码作为您的答案后,我从csv转换为sqlite,但它仍然显示内存错误。请帮帮我@EricDuminil@DinhTruongAnhPhuong你的最后一个例子看起来不错。您知道在脚本崩溃之前db文件会变大多少吗?如果没有其他办法,你可能想试试postgres或mariadb。
import json
with open('output.csv', 'w') as csv_file:
with open("Vietnam_Facebook_Scrape.json", encoding="UTF-8") as json_file:
for line in json_file:
data = json.loads(line)
csv_file.write(';'.join([data['id'], data['t']]))