首页 > 解决方案 > Python将巨大的csv加载到postgresql

问题描述

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

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

第 3 步 - 我使用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()

我寻求关于以下几点的反馈 -

一个。如果我的系统内存小于 JSON 文件的大小,这种将 JSON 加载到 Pandas Dataframe 的方式不会导致内存不足的问题吗?

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

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

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

请指教

标签: pythonpython-3.xpandaspostgresqldask

解决方案


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

参考 :

  1. 在熊猫中加载20gb json 文件
  2. 将数据帧数据加载到 postgresql 表
  3. 将一个大的 json 文件读入 pandas

推荐阅读