我有一个URL文件。该文件看起来像这样
http://www.example.com/images/* http://www.example.org/p/q/r/*/s/t
等等。 URL未排序。我已经按照有条理的方式将其清楚地解释清楚了。
我必须处理这些URL,以便如果有一个单词(2个斜杠之间的单词),2个URL之间不同,并且这些出现的次数是> 1000,我用*
替换这个词例如,在上面的文件中,我将有
eu-west-1:xxxxxxxxxx
文件大小为数百GB。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我们在this paper(第3页末尾)中针对此问题提出了MapReduce算法,该算法是another paper中引入的顺序“中缀提取”算法的并行调整(第4页,算法1)。
在这里,我引用顺序算法:
1. sort URIs
2. tokenize URIs at all special characters
3. cluster URIs according to the first n tokens
4. for all clusters do
5. for all URIs in the cluster do
6. for all possible prefixes do
7. find the set of (distinct) next tokens T
8. end for
9. end for
10. for all URIs in the cluster do
11. set as a prefix the one with the largest |T|
12. set as infix the substring following the prefix
13. end for
14. end for
并行版本的主要思想是通过使用URI的第二个标记(在http://之后)作为映射输出键来创建集群(步骤3),然后执行类似于第4步的操作14)在每个减速器中,即在每个减速器中。 可以找到我们的并行版本的源代码here。
在您提取每个URI的“中缀”后,您可以轻松地将其替换为您想要的任何字符,例如'*'
。请记住,这是一个昂贵的过程,只有当您拥有数百万个URI时才有意义在MapReduce中完成,而您似乎确实拥有这些过程。