Database 如何在分布式机器上划分一个非常大的单词列表搜索,以获得更快的答案
这更像是一个架构问题,如何大规模地解决这个问题 假设您有一个数百万个单词的列表,并且您需要搜索这些数百万个单词是否存在于万亿个单词的集合中 例如:Database 如何在分布式机器上划分一个非常大的单词列表搜索,以获得更快的答案,database,hadoop,apache-spark,information-retrieval,Database,Hadoop,Apache Spark,Information Retrieval,这更像是一个架构问题,如何大规模地解决这个问题 假设您有一个数百万个单词的列表,并且您需要搜索这些数百万个单词是否存在于万亿个单词的集合中 例如: Word_List = ["This", "a", "test", "of", "two", "words","what","words"] The_corpus = ["This", "a", "test", "of", "two", "words","what","words","blah","blah2"] 在上面的示例中,word
Word_List =
["This", "a", "test", "of", "two", "words","what","words"]
The_corpus =
["This", "a", "test", "of", "two", "words","what","words","blah","blah2"]
在上面的示例中,word_列表中的所有单词都在_语料库中找到,因此我们的函数将返回true。请注意,“单词”必须出现两次
我想知道我们是否可以通过Hadoop或Spark解决这个问题,方法是在集群上分发单词库,并编写Mapper和Reducer来检查单词是否存在于语料库中,但我不知道单词列表将如何分发。我无法将word_列表保留在主节点上,因为它太大。您可以在hadoop中的hdfs上添加word_列表和语料库,这将在所有节点上分发这两个文件。现在,您可以从hdfs读取这两个文件。在映射程序代码中,可以使用文件系统类从映射程序代码中的hdfs访问word_列表文件。您可以在Hadoop jar命令中将您的语料库文件作为输入文件路径提到。您可以在Hadoop中的hdfs上添加word_列表和语料库,这将在所有节点上分发这两个文件。现在,您可以从hdfs读取这两个文件。在映射程序代码中,可以使用文件系统类从映射程序代码中的hdfs访问word_列表文件。您可以在Hadoop jar命令中将您的语料库文件作为输入文件路径提到。您的任务的目标类似于常见的连接操作。在实施时,您可以考虑以下几点:
您的任务具有类似于普通联接操作的目标。在实施时,您可以考虑以下几点:
通常,这类任务称为映射侧连接。请参阅一些示例代码(使用DistributedCache),例如。猜测您的问题是如何使用在集群节点之间以某种方式划分语料库的集群来加速搜索。这里我概述了我将要做的事情