在Python中处理大量数据

时间:2012-09-22 18:45:59

标签: python csv amazon-ec2 machine-learning scientific-computing

我一直在尝试处理大量数据(几GB),但我的个人计算机拒绝在合理的时间内完成,所以我想知道我有哪些选项?我使用的是python的csv.reader,但即使拿到200,000行也很慢。然后我将这些数据迁移到sqlite数据库,该数据库检索结果的速度更快,而且没有使用如此多的内存,但速度仍然是一个主要问题。

那么,再次......我有什么选择来处理这些数据?我想知道如何使用亚马逊的spot instances这似乎对这种目的有用,但也许还有其他解决方案可以探索。

假设现场实例是一个不错的选择,考虑到我之前从未使用它们,我想问一下我对它们的期望是什么?有没有人有经验使用它们做这种事情?如果是这样,您的工作流程是什么?我想我可以找到一些博客文章,详细说明科学计算,图像处理或类似的工作流程,但我没有找到任何东西,所以如果你能解释一下或指出一些链接,我会很感激。

提前致谢。

2 个答案:

答案 0 :(得分:7)

我会尝试使用numpy来处理您的大型数据集。与csv.reader相比,Numpy数组应使用更少的内存,并且在使用向量化的numpy函数时,计算时间应该更快。

但是,读取文件时可能存在内存问题。 在阅读文件时,numpy.loadtxtnumpy.genfromtxt也会占用大量内存。 如果这是一个问题,则会比较一些(全新的)替代解析器引擎here。根据这篇文章,新的pandas(一个建立在numpy之上的库)解析器似乎是一个选项。

如评论中所述,我还建议您在阅读文件一次后以二进制格式存储数据,如HDF5。从我的经验中加载HDF5文件中的数据非常快(知道在你的情况下它与sqlite相比有多快会很有趣)。我知道将数组保存为HDF5的最简单方法是使用pandas

import pandas as pd

data = pd.read_csv(filename, options...)
store = pd.HDFStore('data.h5')
store['mydata'] = data
store.close()

加载数据非常简单

import pandas as pd

store = pd.HDFStore('data.h5')
data = store['mydata']
store.close()

答案 1 :(得分:1)

如果你必须使用python,你可以尝试dumbo,它允许你在python中运行Hadoop程序。这很容易入手。然后你可以编写自己的代码来做hadoop流来处理你的大数据。请查看其简短教程:https://github.com/klbostee/dumbo/wiki/Short-tutorial

类似的是来自yelp:https://github.com/Yelp/mrjob