【发布时间】:2021-02-06 16:33:36
【问题描述】:
我有一个 3.7gb 的大型 json 数据文件。我要将json文件加载到数据框并删除未使用的列,而不是将其转换为csv并加载到sql。 内存是 40GB 我的json文件结构
{"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={} 我=1
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)
try:
csv_file.write('; '.join([str(i),"/",data["t"],data["fbid"]]))
except:
pass
然后我从csv转换为sql,它仍然显示错误“MemoryError:”
con = db.connect("fbproject.db")
cur = con.cursor()
with open('output.csv', 'r',encoding="UTF-8") as csv_file:
for item in csv_file:
cur.execute('insert into fbdata values (?)', (item,))
con.commit()
con.close()
感谢阅读
【问题讨论】:
-
ijson 正是为了这个目的而存在的,但是如果您向我们展示您的 json 数据的格式,它会更容易为您提供帮助
-
为什么需要创建列表和数据框?
-
@joao 我只是更新了我的数据结构。我可以用 500mb 的 json 文件处理同样的问题,但大文件是 3.7gb,它显示错误
-
@juanpa.arrivillaga 我的最终目的是将数据加载到 django。 Step1 读取 json 文件,Step 2 加载到 dataframe,Step 3 将文件保存为 csv,Step 4 加载 csv 到 sql,Step 5 加载数据到 django 进行搜索
-
@DinhTruongAnhPhuong 没有回答我的问题。为什么它需要是数据框或列表?您正在尝试最终编写一个 csv 文件。只需在迭代 json 时创建 csv 文件。
标签: python django database sqlite ijson