7

我一直在尝试处理大量数据(几 GB),但我的个人计算机拒绝在合理的时间跨度内完成,所以我想知道我有什么选择?我使用的是 python 的csv.reader,但即使获取 200,000 行也非常缓慢。然后我将这些数据迁移到一个sqlite数据库,它检索结果的速度更快,并且不使用太多内存,但速度缓慢仍然是一个主要问题。

所以,再次......我有什么选择来处理这些数据?我想知道使用亚马逊的现货实例,这似乎对这种目的很有用,但也许还有其他解决方案可供探索。

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

提前致谢。

4

2 回答 2

11

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

但是,读取文件时可能存在内存问题。 numpy.loadtxt或者numpy.genfromtxt在读取文件时也会消耗大量内存。如果这是一个问题,这里会比较一些(全新的)替代解析器引擎。根据这篇文章,新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()
于 2012-10-10T09:18:46.053 回答
1

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

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

于 2012-10-19T07:10:51.403 回答