【问题标题】:How to work with large files in python?如何在 python 中处理大文件?
【发布时间】:2014-05-22 18:22:20
【问题描述】:

我很好奇如何在 python 中处理大文件?

例如,我在硬盘驱动器上有数据集 ~20Gb(只是数字数组),我想对该数组进行排序以获得 k 最小值。 因此数据集无法加载到内存(RAM)中。

我认为算法应该是:通过n个块加载数据集,在块中找到k min,将k min存储在内存中并处理每个块,因此我们得到k * n个值,然后将它们排序得到k个最小值。

但问题是如何存储数据集(什么格式?),从磁盘加载它的最快方法是什么(我必须为特定硬件选择什么大小的块?)也许可以通过使用多个线程来完成?

【问题讨论】:

  • 这些数字有哪些限制?是否有一些上限/下限?这将影响您可能使用的各种方法。
  • 阅读neopythonic.blogspot.de/2008/10/… 了吗?您能否提供有关您的特定任务、数据集等的更多详细信息?
  • 您应该在数据的惰性迭代器上使用heapq.nsmallest()。无需为每个块获取 k 个最小值——您可以在一次通过中即时获得结果。
  • 对于更一般的问题,请使用PyTables
  • @DonaghHatton 我使用 int32 数字。

标签: multithreading algorithm python-2.7 large-data


【解决方案1】:

您需要external sort。如果将所有内容加载到内存中并对其进行排序,则将其命名为internal sort。在数据库中,它使用external sort来做排序任务。

也许以下资源会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2012-08-17
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多