首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python快速迭代大型数据?

用Python快速迭代大型数据?
EN

Stack Overflow用户
提问于 2014-07-21 13:18:05
回答 1查看 259关注 0票数 2

我正在对中型数据(2GB,20 fits记录)进行数据分析,而在当前的机器上,它几乎不适合内存。在这台4GB的机器上达到3GB的占用时,Windows 7的速度会大大减慢。我当前的大多数分析都需要迭代所有记录,并考虑由某些GroupID确定的记录组的属性。

如何处理这一任务?我现在的方法是将它加载到SQLite中并逐行迭代。我在内存中建立组,但是这个也会变得很大。

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

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

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

(PS:硬件升级很难实现。(管理员权限也很麻烦)

EN

回答 1

Stack Overflow用户

发布于 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可能是个过头。也许你可以把排序好的文件写到磁盘上?一旦你这样做了,你就可以研究平行化了。本质上,您将有一个进程读取排序的文件(只要不进行分布式处理,就不希望并行化),它打包一组数据并将其发送到进程池(进程的数量应该固定到您调优的某个数目,以避免内存短缺),这将完成其余的处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24866113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档