【问题标题】:Load large data without iterators or chunks在没有迭代器或块的情况下加载大数据
【发布时间】:2023-03-13 22:08:01
【问题描述】:

我想学习一个大数据文件(7GB):800 行,500 万列。所以我想加载这些数据并将它们放在我可以使用的形式(二维列表或数组)中。

问题就在这里,当我加载数据并尝试存储它们时,它们使用了我所有的内存 (12GB) 并停在第 500 行。

我听说过很多关于如何使用此类数据的信息,例如使用块和迭代器,但我想将它们完全加载到内存中,以便进行交叉验证。 我尝试使用 pandas 来帮助我,但问题是一样的。

按我的意愿加载和存储整个 7GB 数据是否存在一些问题?或者任何其他可以帮助我的想法?

【问题讨论】:

  • 减去其他正在使用的资源后,您还有 12 GB 的 RAM 吗?
  • 不管怎样,如果你真的想把所有的东西都加载到内存中,但是没有足够的内存,答案是购买更多的内存。或者以某种方式压缩数据。
  • 取决于你想做什么。正在进行的是将数据拆分为多个部分,然后每次加载一个部分。
  • @timgeb 是正确的。您声明您想一次将所有内容加载到内存中。分块/迭代(例如使用生成器读取数据)不会改变任何事情,因为最终,它都将在内存中。您需要插入更多 RAM,重新考虑您的解决方案,或者准备好浪费时间在交换空间中折腾。
  • 好吧,你可以建立一个集群并在上面运行Apache Spark,使用Spark DataFrames,这与Pandas非常相似。之后,您应该能够在分布式系统上并行处理您的数据帧

标签: python pandas numpy machine-learning large-data


【解决方案1】:

您可以尝试获取交换文件或页面文件。根据您的操作系统,您可以使用虚拟内存来允许您的系统在单个进程中处理比物理内存更多的对象。根据working set 的大小,性能可能不会受到太大影响,或者可能会非常糟糕。 也就是说,几乎可以肯定的是,获得更多内存或使用一些分区策略(类似于您所说的分块)是解决问题的更好方法。

在 Windows 上查看 here 以获取有关如何调整页面文件大小的信息。对于 Redhat Linux,请尝试this link 以获取有关添加交换的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 2018-03-21
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2013-02-28
    相关资源
    最近更新 更多