用Python快速迭代大量数据?

2024-05-28 21:07:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对中等大小的数据(2GB,20Mio记录)进行数据分析,而在目前的机器上,它几乎无法放入内存。当在这台4GB的计算机上达到3GB的占用率时,Windows7的速度会大大降低。我当前的大多数分析都需要遍历所有记录,并考虑由某个GroupID确定的记录组的属性。在

如何完成这项任务?我当前的方法是将其加载到SQLite中并按行迭代。我在内存中构建组,但这也变得相当大。在

我有以下想法,但也许你可以提出更好的方法:

  • 按GroupID对SQLite表进行排序,以便将组放在一起
  • 以某种方式按列存储数据,这样我就不必读取所有列
  • 序列化数据以使用Python更快地解析它?在

这些想法对我来说似乎很难结合:(我该怎么办?在

(注:硬件升级很难获得。管理权也很麻烦)


Tags: 数据方法内存机器sqlite属性排序计算机
1条回答
网友
1楼 · 发布于 2024-05-28 21:07:17

如果不了解您正在尝试进行的数据和聚合,很难说什么,但绝对不要做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<;-这听起来是个不错的方法。但是很多聚合(比如count、average、sum等)并不需要这个。在这种类型的聚合中,您只需持有一个(key, aggregation)的映射,然后遍历这些行并迭代地将它们应用于聚合(并丢弃该行)。在

您当前是否在内存中收集属于某个组的所有行并然后进行聚合?如果是这样,您可能只需要更改代码,以便在读取行时进行聚合。在

编辑:回应评论:
如果是这样的话,我会去分类。不过,如果您所做的只是排序,那么SQL可能是一种过度使用。也许你可以把整理好的文件写在磁盘上?一旦你这样做了,你就可以研究并行化。本质上,你将有一个进程读取排序的文件(只要你不做分布式处理,你就不想并行化这个文件),它将一组数据打包并发送到一个进程池(进程的数量应该固定为你所优化的某个数量,以避免内存不足)执行其余的处理。在

相关问题 更多 >

    热门问题