python - 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,因为它提供块读取数据(我对此不熟悉)。
请指教
解决方案
您可以将输入的 json 文件拆分为许多较小的文件,并在将chunk
文件内容读入 pandas 数据帧时使用 size 参数。copy_from
此外,使用支持buffer
大小参数的 psycopg2函数。事实上,您可以使用 execute_batch() 将成批的行插入您的 Postgresql 表中,如下面参考文献中提到的文章中所述。
参考 :
- 在熊猫中加载20gb json 文件
- 将数据帧数据加载到 postgresql 表中
- 将一个大的 json 文件读入 pandas
推荐阅读
- python - 将网站网址拆分为关键字,多重拆分
- php - PHP.INI 不会更改 include_path。为什么?
- c# - c# 使用 Linq 将数组中的数组投影到新数组上?
- javascript - 在 App Scripts (js) 中运行 Youtube 数据服务时出错 - 已超出未经验证使用的每日限制
- python - Spyder 4中的情节没有交互性
- html - 为什么移动设备上此网页上的内容小于等于 320 像素宽度而不是 100% 宽度?
- javascript - Javascript/Typescript array.map 函数正在更改 .map 之前定义的变量的值
- c++ - 在 LAB 对手色彩空间中转换和操作时如何减轻数据丢失?
- html - 如何在 jquery 中将变量值附加到动态创建的 html 元素
- javascript - 为什么调用 useState 定义的 setter 函数后 state 立即设置为 null?