为大型数据集生成ngram频率

时间:2012-12-06 15:38:41

标签: postgresql hadoop mapreduce bigdata elastic-map-reduce

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

在接下来的一天左右,最好和最具成本效益的方法是什么?

我的想法是:

  • PostgreSQL使用正则表达式来分割句子和单词。我已经在PostgreSQL中使用了WEX转储,并且我已经有正则表达式进行拆分(这里不需要主要的准确性)
  • 使用Hadoop的MapReduce
  • 使用亚马逊的Elastic MapReduce进行MapReduce,我对
  • 几乎一无所知

我对Hadoop的体验包括在三个EC2实例上非常低效地计算Pi。我很擅长Java,我理解Map + Reduce的概念。 PostgreSQL我担心会花很长时间,因为它不容易并行化。

还有其他方法吗?在接下来的几天里完成它的最佳选择是什么?

2 个答案:

答案 0 :(得分:2)

Mapreduce可以正常工作,也许你可以通过猪进行大部分输入输出改组。

http://arxiv.org/abs/1207.4371

对于某些算法。

当然,为了确保你有一个跑步开始,你实际上并不需要使用mapreduce来完成这项任务;只需自己拆分输入,制作最简单的快速程序来计算单个输入文件的ngrams并稍后聚合ngram频率。

答案 1 :(得分:2)

Hadoop为您提供了两件好事,这在我看来是主要的:parralell任务运行(仅映射作业)和分布式排序(在地图和减少之间的混乱) 对于NGrams来说,看起来你需要两个 - parralel任务(映射器)发出ngrams和shuffling - 来计算每个ngram的数量。
所以我认为Hadoop是理想的解决方案。