我一直在尝试处理大量数据(几GB),但我的个人计算机拒绝在合理的时间内完成,所以我想知道我有哪些选项?我使用的是python的csv.reader,但即使拿到200,000行也很慢。然后我将这些数据迁移到sqlite数据库,该数据库检索结果的速度更快,而且没有使用如此多的内存,但速度仍然是一个主要问题。
那么,再次......我有什么选择来处理这些数据?我想知道如何使用亚马逊的spot instances这似乎对这种目的有用,但也许还有其他解决方案可以探索。
假设现场实例是一个不错的选择,考虑到我之前从未使用它们,我想问一下我对它们的期望是什么?有没有人有经验使用它们做这种事情?如果是这样,您的工作流程是什么?我想我可以找到一些博客文章,详细说明科学计算,图像处理或类似的工作流程,但我没有找到任何东西,所以如果你能解释一下或指出一些链接,我会很感激。
提前致谢。
答案 0 :(得分:7)
我会尝试使用numpy
来处理您的大型数据集。与csv.reader
相比,Numpy数组应使用更少的内存,并且在使用向量化的numpy函数时,计算时间应该更快。
但是,读取文件时可能存在内存问题。
在阅读文件时,numpy.loadtxt
或numpy.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