首页 > 解决方案 > 在 pandas Python 中读取大表的有效方法是什么?

问题描述

我在 MySql 中有一个形状为 4000 万行 x 54 列的表。我尝试使用 read_sql 分块读取表,但内存不足(我正在使用 32 gb、8 核 EC2 实例)。然后我尝试了 Limit 和 Offset 方法,但它真的很慢。

是否有任何有效的方法来读取表格而不会丢失内存并更快地读取表格。

我研究了一些大数据技术,但由于我不熟悉大数据,我无法决定选择哪一种。

目前我正在使用它来读取表格,但它真的很慢而且肯定不是很有效。

def read_sql_chunked(query, con, nrows, chunksize=10000):
    start = 1
    dfs = []
    while start < nrows:
        df = pd.read_sql("%s LIMIT %s OFFSET %s" % (query, chunksize, start), con)
        dfs.append(df)
        print(start, chunksize)
        start += chunksize
    return pd.concat(dfs, ignore_index=True)
dt = read_sql_chunked(query=query, con=conn, nrows=40000000)

标签: pythonmysqlpandas

解决方案


你的表有多少行?听起来您的表太大而无法容纳您拥有的内存量。如果要汇总数据,最好先在 sql 中进行。


推荐阅读