Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hadoop mapreduce反之亦然_Hadoop_Mapreduce - Fatal编程技术网

hadoop mapreduce反之亦然

hadoop mapreduce反之亦然,hadoop,mapreduce,Hadoop,Mapreduce,下面是我用来学习hadoop mapreduce的示例数据。 例如,它是跟随者和跟随者的数据 Follower,followee a,b a,c a,d c,b b,d d,a b,c b,e e,f 就像a跟在b后面,a跟在c后面,依此类推 我试图处理数据并得到结果,如果a在b之后,b也在a之后,那么a,b应该是输出txt文件中的结果。我是一个新的地图减少,并试图找到一种方法,使我可以得到下面的结果 a,d c

下面是我用来学习hadoop mapreduce的示例数据。 例如,它是跟随者和跟随者的数据

Follower,followee   
    a,b
    a,c
    a,d
    c,b
    b,d
    d,a
    b,c
    b,e
    e,f
就像a跟在b后面,a跟在c后面,依此类推

我试图处理数据并得到结果,如果a在b之后,b也在a之后,那么a,b应该是输出txt文件中的结果。我是一个新的地图减少,并试图找到一种方法,使我可以得到下面的结果

 a,d
 c,b

你可以使用一个技巧来实现这一点

诀窍是将键传递给减速器,使(a,d)和(d,a)具有相同的键并最终位于相同的减速器中:

当(a,d)出现时:

键的形成方式始终是低字母排在高字母之前。因此,对于这两个记录,键都是“a,d”

因此映射器的输出将为:

Record: a,b
Key = a,b  Value = a,b

Record: a,c
Key = a,c  Value = a,c

Record: a,d
Key = a,d  Value = a,d

Record: c,b
Key = b,c  Value = c,b

Record: b,d
Key = b,d  Value = b,d

Record: d,a
Key = a,d  Value = d,a

Record: b,c
Key = b,c  Value = b,c

Record: b,e
Key = b,e  Value = b,e

Record: e,f
Key = e,f  Value = e,f
现在,在减速机中,记录将按以下顺序到达:

Record 1: 
    Key = a,b  Value = a,b

Record 2: 
    Key = a,c  Value = a,c

Record 3: 
    Key = a,d  Value = a,d
    Key = a,d  Value = d,a

Record 4: 
    Key = b,c  Value = c,b
    Key = b,c  Value = b,c

Record 5: 
    Key = b,d  Value = b,d

Record 6: 
    Key = b,e  Value = b,e

Record 7: 
    Key = e,f  Value = e,f
因此,在reducer中,您可以只解析记录3和记录4:

Record 3: 
    Key = a,d  Value = a,d
    Key = a,d  Value = d,a

Record 4: 
    Key = b,c  Value = c,b
    Key = b,c  Value = b,c
因此,输出将是:

a,d
c,b
即使你有名字而不是字母表,这种逻辑也会起作用。 例如,您需要在映射器端使用以下逻辑(其中s1为第一个字符串,s2为第二个字符串):

因此,如果您有:

String s1 = "Stack";
String s2 = "Overflow";
s1 = "Overflow";
s2 = "Stack";
关键是:

Stack,Overflow
Stack,Overflow
同样,如果您有:

String s1 = "Stack";
String s2 = "Overflow";
s1 = "Overflow";
s2 = "Stack";
然而,关键在于:

Stack,Overflow
Stack,Overflow

如果我有一些名字而不是字母,我怎么能做到呢@manjunathIt也会起同样的作用。只需按字母顺序排列姓名。非常感谢:)@ManjunathBallur