在一组URL中查找常见模式

时间:2017-01-13 17:53:08

标签: amazon-web-services url mapreduce distributed-computing

我有一个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。有人可以帮我解决这个问题吗?

1 个答案:

答案 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中完成,而您似乎确实拥有这些过程。