我正在尝试使用cx_Oracle软件包将Oracle数据库中的2亿行数据加载到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开销:在监视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使用/保持,或者有其他方法可以实现此目的?