python - 是否可以在 Pandas.ReadSQL 中使用“chunksize=”选项来限制/限制内存/RAM 的使用?
问题描述
我正在尝试使用 cx_Oracle 包将 2 亿行数据从 Oracle 数据库加载到 pandas 数据框中:
import cx_Oracle
conct = cx_Oracle.connect(self.dbuser, self.dbpassword, cx_Oracle.makedsn(self.host, self.port, self.sid))
query= """
SELECT *
FROM IDS
"""
df = pd.read_sql(query, con=conct)
return df
我有一个担忧:
1) RAM over head:在监控 RAM 使用情况后,我注意到 python 在构建数据帧时保留了整个 2 亿行所需的所有内存。我试图通过使用 chunksize 选项来限制/限制 RAM 的使用,尽管没有成功。这是我正在尝试的:
# Create empty list
dfl = []
# Create empty dataframe
dfs = pd.DataFrame()
# Start Chunking
for chunk in pd.read_sql(query, con=conct, ,chunksize=10000000):
# Start Appending Data Chunks from SQL Result set into List
dfl.append(chunk)
# Start appending data from list to dataframe
dfs = pd.concat(dfl, ignore_index=True)
但从技术上讲,对于我在每次拉取块后释放的 RAM,我不是将它重新分配给累积持有块的列表吗?
有没有办法使用 pd.rad_sql 方法真正限制/限制大数据传输的 RAM 使用/保留,或者是否有替代方法来实现这一点?
解决方案
推荐阅读
- excel - 另一个工作表的动态命名范围
- debugging - x在Pycharm中通过后如何在断点处停止?
- arrays - 深层 JSON 对象引用
- docker-swarm - 为什么 traefik acme 生成的证书被标记为“不安全”?
- python - 在Python3中打印涉及英文和日文文本的右对齐表格列
- sql - 使用纯 SQL 从 foo.year、foo.month、foo.day 转换为日期?
- sql - Teradata SQL如何将“按日期”转移到“日期范围”?
- python - 将 mysql 查询转换为 sqlalchemy 语句
- algorithm - 按差异对列表元素进行分组
- java - 如何在 Smali 汇编语言中传递即时值?