1

如果我们在一个文件中有一个巨大的字符串数据,我们通常可以使用算法,比如(hash + heap)或(trie + heap)等来有效地找到高频的前“k”个单词。如果我的“数据库”中有大量字符串数据,我该怎么做。现在我知道的唯一方法是查询整个数据集,然后对其进行频率操作。但是查询庞大的数据集是一项非常昂贵的操作。有没有有效/更好的方法来做到这一点?

4

1 回答 1

2

通过并行化并使用集群而不是单台机器来查找有关海量数据的信息。

您所描述的是一个经典的map-reduce问题,可以使用以下函数(在伪代码中)处理:

map(doc):
  for each word in doc:
      emitIntermediate(word,"1")
reduce(list<word>):
  emit(word,size(list))

以多种语言实现的 map reduce 框架允许您轻松扩展问题并使用巨大的集群,无需太多努力,为您处理故障和工作人员管理。

在这里: doc 是单个文档,它通常假设是文档的集合。如果您只有一个大文档,您当然可以将其拆分为较小的文档并调用相同的算法。

于 2012-08-16T12:23:46.470 回答