首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在分布式机器上划分一个非常大的单词列表搜索以获得更快的答案

如何在分布式机器上划分一个非常大的单词列表搜索以获得更快的答案
EN

Stack Overflow用户
提问于 2017-02-20 02:30:24
回答 4查看 80关注 0票数 0

这更多的是一个架构问题,您将如何在规模上解决这个问题。

假设您有一个数百万单词的列表,您需要搜索这数百万单词是否存在于一个数万亿单词的集合中。

例如,

代码语言:javascript
运行
复制
Word_List =
["This", "a", "test", "of", "two", "words","what","words"]  

The_corpus =
["This", "a", "test", "of", "two", "words","what","words","blah","blah2"]  

在上面的示例中,word_list中的所有单词都在the_corpus中找到,因此我们的函数将返回true。请注意,“单词”必须出现两次。

我想知道我们能否通过在集群上分发the_corpus并编写Mapper和Reducer来检查单词是否存在于语料库中来解决这个问题,但我不知道word_list将如何分布。我不能将word_list保存在主节点上,因为它太大了。

EN

Stack Overflow用户

发布于 2017-02-21 00:51:49

猜测您的问题是如何使用在集群节点之间以某种方式分区的集群来加速搜索。在这里,我概述了我会做什么。

  1. 对语料库进行排序并删除重复,但为每个单词添加一些重复,例如1,blah 1,blah2 1,1,测试1,这1,2 1,什么1,2,等等,每行可能有一个单词,以简化搜索过程,或者以某种打包的形式来加速IO。
  2. 将语料库划分为N个部分,并记录每个部分的字母表范围,例如,第一部分有从a到aff开始的单词,从afg到amp的part2,等等,将所有部分放在每个节点可访问的共享存储上。
  3. 对word_list进行排序(并删除重复项,但添加每个单词的计数),并将每个单词划分为M个节点的组,并将每个组分配给一个节点进行搜索。
  4. 对每个节点上的每个单词执行二进制搜索(因为单词是排序的)(搜索工具知道要根据字母范围搜索哪个语料库部分),并报告返回为true (如果所有单词都有正确的计数)或false (一旦一个单词失败即可返回)。当然要由你来决定什么才算成功。可以对搜索进行优化。例如,如果为一个节点分配了三个单词测试的组,则在第x部分的中间找到单词test,则只需要在第x部分的右半部分进行搜索。
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42335551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档