首页 > 解决方案 > 是否可以在 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 使用/保留,或者是否有替代方法来实现这一点?

标签: pythonpandascx-oraclein-memory

解决方案


推荐阅读