【问题标题】:What is the efficient way to read big tables in pandas Python?在 pandas Python 中读取大表的有效方法是什么?
【发布时间】:2020-06-02 04:43:52
【问题描述】:

我在 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)

【问题讨论】:

  • 请不要在这里使用印度语。如您所见,人们不知道什么是“千万行”。

标签: python mysql pandas


【解决方案1】:

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

【讨论】:

  • 4 千万行。我不想总结它,我想将它们全部用于一些项目。
  • 附加信息请求。 MySQL 主机服务器上有任何 SSD 或 NVME 设备吗?在 pastebin.com 上发布并分享链接。从您的 SSH 登录根目录中,文本结果为:B) SHOW GLOBAL STATUS;至少 24 小时正常运行时间后 C) 显示全局变量; D) 显示完整的处理程序; F) 显示 ENGINE INNODB 状态; G) SELECT name, count FROM information_schema.innodb_metrics ORDER BY name;为服务器工作负载调优分析提供建议。
  • @WilsonHauck 不,我没有任何 SSD 或 NVME 设备。这也可能有效,但我有 10 个这样的表,我认为这不是一个编码明智的好方法。我正在寻找编码解决方案。
  • @ParitoshSharma 编码解决方案无法覆盖配置错误。请提供 2020-06-02 要求的信息和 SHOW CREATE TABLE(10 个相似的表之一); ,谢谢。
  • @ParitoshSharma 您的问题可能就像需要索引来防止表扫描一样简单。请通过 pastebin.com 或类似的文本共享工具从您的系统中提供 B) C) D) F) G)。
猜你喜欢
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多