【问题标题】:Python load huge csv to postgresqlPython将巨大的csv加载到postgresql
【发布时间】:2021-12-25 14:44:51
【问题描述】:

这是我正在用python开发的程序-

第 1 步 - 我们将 JSON 文件(大小可能以 GB 为单位,例如 50 GB 或更多)从源到我们的服务器 - Step2 - 我使用 Pandas Dataframe 将 JSON 加载到 DF 中 df = pd.read_json(jsonfile,index=False, header=False

Step3 - 我使用df.to_csv(temp_csvfile,..)

Steps4 - 我使用 Python psycopg2 建立 Postgresql 连接和游标 ..

curr=conn.cursor() ```
Step5 - Read the CSV and load using copy_from 
 with open(temp_csvfile,'r') as f:
     curr.copy_from(f,..)
 conn.commit()

我就以下几点寻求反馈 -

一个。如果我的系统内存是

b.在第 5 步,我再次以读取模式打开文件会出现同样的问题,因为它可能会在内存中加载文件(我在这里遗漏了什么)

c。有没有更好的方法来做到这一点..

d。可以使用 Python DASK,因为它提供分块读取数据(我对此不熟悉)。

请指教

【问题讨论】:

  • 你对这种方法的怀疑是对的,它肯定会导致“内存不足”的问题。你不能在多个 json 文件中获取数据,而是在一个巨大的文件中获取数据。如果生成多个数据集文件,数据源系统也必然会更好。
  • 感谢 Anand,但现在我们无法控制源系统。
  • 好的,你试过了吗,有没有报错,你能分享更多细节吗?
  • 另外,chunks这样大的json文件,可以参考这个答案(stackoverflow.com/a/67126154/14973743)
  • 感谢 Anand,我正在尝试使用 pandas chuncksize 选项。

标签: python python-3.x pandas postgresql dask


【解决方案1】:

您可以将输入的 json 文件拆分为许多较小的文件,并在将文件内容读入 pandas 数据帧时使用chunk 大小参数。此外,使用支持 buffer 大小参数的 psycopg2 copy_from 函数。 事实上,您可以使用 execute_batch() 将成批的行插入到您的 Postgresql 表中,如下面参考文献中提到的文章中所述。

参考资料:

  1. 加载中20gb json file in pandas
  2. 将数据帧数据加载到 postgresql 表中article
  3. 阅读large json file into pandas

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多