Postgresql 为大型数据集生成ngram频率

Postgresql 为大型数据集生成ngram频率,postgresql,hadoop,mapreduce,bigdata,elastic-map-reduce,Postgresql,Hadoop,Mapreduce,Bigdata,Elastic Map Reduce,我想为大型数据集生成ngram频率。维基百科,或者更具体地说,Freebase的WEX适合我的目的 在第二天左右做这件事的最佳和最具成本效益的方法是什么 我的想法是: PostgreSQL使用正则表达式拆分句子和单词。我已经有了PostgreSQL中的WEX转储,并且我已经有了正则表达式来进行拆分(这里不要求主要的准确性) 使用Hadoop的MapReduce MapReduce和Amazon的弹性MapReduce,我对此几乎一无所知 我使用Hadoop的经验是,在三个EC2实例上计算Pi

我想为大型数据集生成ngram频率。维基百科,或者更具体地说,Freebase的WEX适合我的目的

在第二天左右做这件事的最佳和最具成本效益的方法是什么

我的想法是:

  • PostgreSQL使用正则表达式拆分句子和单词。我已经有了PostgreSQL中的WEX转储,并且我已经有了正则表达式来进行拆分(这里不要求主要的准确性)
  • 使用Hadoop的MapReduce
  • MapReduce和Amazon的弹性MapReduce,我对此几乎一无所知
我使用Hadoop的经验是,在三个EC2实例上计算Pi的效率非常低。我精通Java,并且理解Map+Reduce的概念。 我担心PostgreSQL需要很长很长时间,因为它不容易并行


还有其他方法吗?在接下来的几天里,我完成这项工作的最佳选择是什么?

Mapreduce会很好地工作,而且可能您可以通过pig完成大部分输入输出洗牌

对于一些算法


当然,为了确保开始运行,您实际上不需要使用mapreduce来完成此任务;您只需自己分割输入,编写最简单的快速程序来计算单个输入文件的ngram,并在以后聚合ngram频率。

Mapreduce将很好地工作,并且可能您可以通过pig完成大部分输入输出洗牌

对于一些算法


当然,为了确保开始运行,您实际上不需要使用mapreduce来完成此任务;您只需自己分割输入,编写最简单的快速程序来计算单个输入文件的ngram,并在以后聚合ngram频率。

Hadoop给了您两个好处,我认为这两个好处主要是:parralell任务运行(仅映射作业)和分布式排序(在映射和减少之间切换)
对于ngram,看起来您需要两种方法—parralel任务(映射器)来发出ngram,以及洗牌—来计算每个ngram的数量。

因此,我认为Hadoop在这里是理想的解决方案。

Hadoop给了您两个好处,在我看来,这两个好处主要是:parralell任务运行(仅映射作业)和分布式排序(在映射和还原之间混洗
对于ngram,看起来您需要两种方法—parralel任务(映射器)来发出ngram,以及洗牌—来计算每个ngram的数量。
所以我认为Hadoop是理想的解决方案