在 Pandas 数据框中加载大表时,如何避免 EC2 中的内存错误?
Posted
技术标签:
【中文标题】在 Pandas 数据框中加载大表时,如何避免 EC2 中的内存错误?【英文标题】:How do I avoid memory error in EC2 when loading a huge table in Pandas dataframe? 【发布时间】:2020-08-28 06:06:17 【问题描述】:我尝试连接到 redshift 并将我的巨大事实表加载到 pandas 数据框中,如下所示, 而且我在执行脚本时总是遇到内存错误。 我认为块部分的加载不正确,或者我根本不应该将整个事实表加载到数据框中。有人能指出正确的方向吗?
conn = psycopg2.connect(dbname='', user='', host='', port='',
password='')
df = pd.DataFrame()
for chunk in pd.read_sql(
"select * from MyFactTable ",
con=conn, chunksize=1000):
df = df.append(chunk)
【问题讨论】:
【参考方案1】:是的,df = df.append(chunk)
部分意味着您将整个表一次加载到内存中,所以您最好不要分块。
如果可能的话,你需要单独处理每个chunk;根据您的计算,这可能容易或困难。如果可能,您还应该将尽可能多的处理推送到 SQL 查询中(例如,如果您只需要一些行,请使用 WHERE
子句)。
PS:根据表的大小以及您需要对其进行的处理,您可能还可以选择具有更多内存的 EC2 实例;不是一个优雅的解决方案,但有时在问题上投入资源是可行的......
【讨论】:
啊,我明白了,我不应该有一个包含所有数据的数据框。相反,我应该处理数据并按块输出它们对吗? 就是这样。如果您正在计算可以逐块完成的事情,那么一切都很好;只要确保你一次只有一个内存块。以上是关于在 Pandas 数据框中加载大表时,如何避免 EC2 中的内存错误?的主要内容,如果未能解决你的问题,请参考以下文章