我正在对中型数据(2GB,20 fits记录)进行数据分析,而在当前的机器上,它几乎不适合内存。在这台4GB的机器上达到3GB的占用时,Windows 7的速度会大大减慢。我当前的大多数分析都需要迭代所有记录,并考虑由某些GroupID确定的记录组的属性。
如何处理这一任务?我现在的方法是将它加载到SQLite中并逐行迭代。我在内存中建立组,但是这个也会变得很大。
我有以下的想法,但也许你可以提出更好的方法:
这些想法对我来说似乎很难结合起来:(我该怎么办?
(PS:硬件升级很难实现。(管理员权限也很麻烦)
发布于 2014-07-21 13:45:14
如果不了解您想要做的数据&聚合,就很难说出任何事情,但是绝对不要做serialize data to parse it faster with Python --很可能这不是问题所在。而且可能不是store data somehow column-wise so that I don't have to read all columns。
sort SQLite table by GroupID so that groups come in together <- -这听起来是个不错的方法。但是很多的集合(如计数、平均值、和等)不需要这个。在这种类型的聚合中,您可以简单地持有一个(key, aggregation)映射,并遍历这些行并迭代地将它们应用于聚合(并丢弃该行)。
当前是否正在收集属于内存中组的所有行,然后进行聚合?如果是这样的话,您可能只需要更改代码,以便在读取行时进行聚合。
编辑:回应评论:
如果是这样的话,我就去分拣。不过,如果您所做的只是排序,那么SQL可能是个过头。也许你可以把排序好的文件写到磁盘上?一旦你这样做了,你就可以研究平行化了。本质上,您将有一个进程读取排序的文件(只要不进行分布式处理,就不希望并行化),它打包一组数据并将其发送到进程池(进程的数量应该固定到您调优的某个数目,以避免内存短缺),这将完成其余的处理。
https://stackoverflow.com/questions/24866113
复制相似问题