Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一个3.7GB的大json文件加载到dataframe中,并使用ijson转换为csv文件_Python_Django_Database_Sqlite_Ijson - Fatal编程技术网

Python 将一个3.7GB的大json文件加载到dataframe中,并使用ijson转换为csv文件

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

我有一个3.7gb的大json数据文件。我将把json文件加载到dataframe并删除未使用的列,然后将其转换为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={} 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
您不需要将任何内容写入CSV。如果确实需要,您可以简单地逐行写入文件:

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
您不需要将任何内容写入CSV。如果确实需要,您可以简单地逐行写入文件:

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']]))