【问题标题】:Reading huge CSV files using Pandas vs. MySQL使用 Pandas 与 MySQL 读取巨大的 CSV 文件
【发布时间】:2019-03-25 08:30:28
【问题描述】:

我有一个 500+ MB 的 CSV 数据文件。我的问题是,对于数据操作(例如,读取、处理)来说,Python MySQL client 会更快,因为所有工作都映射到 SQL 查询中,优化留给优化器。但是,与此同时,Pandas 正在处理一个应该比与服务器通信更快的文件?

我已经检查了"Large data" work flows using pandasBest practices for importing large CSV filesFastest way to write large CSV with PythonMost efficient way to parse a large .csv in python?。但是,我还没有发现任何关于 Pandas 和 MySQL 的比较。

用例:

我正在处理由 1,737,123 行和 8 列组成的文本数据集。我正在将此数据集输入 RNN/LSTM 网络。我在喂食之前做了一些预处理,使用定制的编码算法进行编码。

更多细节

我有 250 多个实验要做,12 种架构(不同的模型设计)要尝试。

我很困惑,我觉得我错过了什么。

【问题讨论】:

  • 我发现加载 MySQL 数据的最快方法是通过LOAD DATA INFILE 来完成。这是迄今为止最有效的路线。
  • @FrankerZ 您能否详细说明您的意思是与其他 Python 技术相比效率最高,还是从 MySQL 加载时效率最高?
  • 投票结束因为不清楚:在不知道您的使用场景的情况下无法回答。
  • 好的,我会提供更多细节。
  • @ivan_pozdeev 用例场景够清楚吗?

标签: python mysql pandas csv


【解决方案1】:

网上没有比较,因为这两种情况给出了不同的结果:

  • 使用 Pandas,您最终会在内存中得到一个 Dataframe(作为 NumPy 的 ndarray 底层),可作为原生 Python 对象访问
  • 使用 MySQL 客户端,您最终会在磁盘 (unless you're using an in-memory database) 上的 MySQL 数据库中获得数据,可通过 IPC/sockets 访问

因此,性能将取决于

  • 低速通道(IPC、磁盘、网络)需要传输多少数据
  • 传输与处理的相对速度有多快(哪一个是瓶颈)
  • 您的处理设施更喜欢哪种数据格式(即涉及哪些额外的转换)

例如:

  • 如果您的处理设施可以驻留在用于读取它的同一 (Python) 进程中,则最好将其直接读取为 Python 类型,因为您不需要将其全部传输到 MySQL 进程,然后再返回(每次转换格式)。
  • OTOH,如果您的处理设施是用其他一些流程和/或语言实现的,或者例如驻留在计算集群中,通过从方程式中消除相对较慢的 Python,将其直接连接到 MySQL 可能会更快,并且因为无论如何您都需要再次传输数据并将其转换为处理应用程序的本机对象。

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多