分析无法适应内存的数据

时间:2012-07-17 13:59:20

标签: python database data-analysis

我有一个数据库,其中包含需要分析的原始文本。例如,我收集了数亿个网页的标题标签,并根据主题对它们进行了聚类。我现在有兴趣对每个主题集群的子集执行一些额外的测试。问题是双重的。首先,我不能将所有文本都放入内存来评估它。其次,我需要并行运行其中几个分析,所以即使我可以将一个子集放入内存中,我当然也无法将许多子集放入内存中。

我一直在使用生成器,但通常需要知道有关已加载和评估的数据行的信息。

我的问题是:处理和分析无法融入内存的数据的最佳方法是什么。必须从某种数据库中提取数据(目前是mysql,但很快就会转向更强大的解决方案。)

我正在构建用Python处理数据的软件。

谢谢,

修改

我将整天研究和集思广益,并计划继续发表我的想法和发现。请留下您可能有的任何意见或建议。

IDEA 1:标记单词和n-gram并保存到文件。 对于从数据库中提取的每个字符串,使用已存在文件中的标记进行标记。如果令牌不存在,请创建它。对于每个单词标记,从右到左组合,直到存在字符串中所有单词的单个表示。搜索包含减少的令牌以查找潜在匹配和相似性的现有列表(可以适合内存)。每个简化的令牌将包含指示令牌类别的标识符。如果发现缩减的令牌(由单词令牌组合创建的令牌)与感兴趣的令牌化字符串明确匹配,而不是直接匹配,则缩减的令牌将被分解为其对应物并且通过单词比较单词令牌 - 令牌到感兴趣的字符串。

我不知道是否已经存在可以执行此操作的库或模块,我也不确定从中获得多少好处。但是,我的优先事项是:1)节省内存,2)担心运行时。想法?

编辑2

Hadoop肯定会解决这个问题。我在python和hadoop中找到了一些关于自然语言处理的优秀资源。见下文:

  1. http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
  2. http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
  3. http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
  4. https://github.com/klbostee/dumbo/wiki/Short-tutorial
  5. 感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

为此目的创建了

Map/Reduce

最好的地图缩减引擎是Hadoop,但它具有很高的学习曲线,需要很多节点才值得。如果这是一个小项目,您可以使用MongoDB,这是一个非常容易使用的数据库,并包含一个使用Javascript的内部地图缩减引擎。 map reduce框架非常简单易学,但缺少使用Hadoop在JDK中可以获得的所有工具。

警告:您只能在MongoDB的地图缩减引擎上一次运行一个地图缩减作业。这对于链接作业或中等数据集(<100GB)是好的,但它缺乏Hadoop的并行性。

答案 1 :(得分:0)

  

目前正在使用mysql,但很快就会转而使用更强大的解决方案。

请不要更糟糕的时间 - 对于大多数类型的任务,调整MySQL是最好的解决方案。

要处理大量数据,请使用iteratoolsBuild a Basic Python Iterator

关于如何迭代数据。这取决于你的算法。