python - 在 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)
解决方案
你的表有多少行?听起来您的表太大而无法容纳您拥有的内存量。如果要汇总数据,最好先在 sql 中进行。
推荐阅读
- julia - LoadError:Julia for 循环中的 UndefVarError
- java - Android WorkManager 和 Worker
- gcc - arm-none-eabi-gcc 与 nucleo L432KC 板
- java - 无法为简单的控制器运行 Spring Boot 测试
- python - 是否可以从条目小部件或文本小部件在树视图中插入多行文本?或类似的东西?
- c# - 自定义调整窗口大小
- python - Python Tkinter 应用程序将焦点从打开的文件夹中移开
- javascript - 如何条带化 HTML标记并将其替换为
? - macos - macOS (AppKit/SwiftUI) 中的自定义对象全选/取消选择菜单项
- c# - 如何在 .NET Core 中使用依赖注入注册多个项目?