【发布时间】: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