Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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
Java 两个map reduce作业,并将每个作业的缩减值合并到一个包含两个值的列表中_Java_Hadoop_Dictionary_Mapreduce_Reduce - Fatal编程技术网

Java 两个map reduce作业,并将每个作业的缩减值合并到一个包含两个值的列表中

Java 两个map reduce作业,并将每个作业的缩减值合并到一个包含两个值的列表中,java,hadoop,dictionary,mapreduce,reduce,Java,Hadoop,Dictionary,Mapreduce,Reduce,我正在编写一个MapReduce程序,要求我查找节点000-999(本质上是一个web图形处理器)的入站和出站链接数。我需要返回一个特定的节点作为键,返回每个文档的输出度和输入度作为值。例如 示例文本文件: 000 002 001 002 002 000 001 000 应返回: 000 1 2 001 2 0 002 1 2 按照我的逻辑,似乎我需要创建两个map reduce作业,第一个传入一个长可写密钥,其值为节点对(例如000 002),计算每个节点的出站链接数,并在reducer阶

我正在编写一个MapReduce程序,要求我查找节点000-999(本质上是一个web图形处理器)的入站和出站链接数。我需要返回一个特定的节点作为键,返回每个文档的输出度和输入度作为值。例如

示例文本文件:

000 002
001 002
002 000
001 000
应返回:

000 1 2
001 2 0
002 1 2
按照我的逻辑,似乎我需要创建两个map reduce作业,第一个传入一个长可写密钥,其值为节点对(例如000 002),计算每个节点的出站链接数,并在reducer阶段结束时返回大约000 1。然后,我将通过翻转成对的节点(例如,000002变为002 000)来查找文档的in度,并查找这些出站链接的计数。在上面的示例中,这将返回0002。然后我需要合并这些值,以得到最终输出00012。创建两个映射作业并以某种方式将这两个值合并到两个值的列表中的最佳方法是什么?如果我使用java而不是Hive来编写代码,有没有一种方法可以连接这些值?有没有更简单、更有效的方法来解决这个问题


编辑:对于这个程序,映射器功能是相同的,因为我只是将两个值000 002切换到002 000,以便以完全相同的方式计算入站路径和出站路径。reducer函数也是完全相同的,但它需要在两个单独的作业上运行,因此我不会将最终值作为in degree和out degree的总和。我需要返回in度,然后返回out度并将它们附加到值列表中。

我的建议是使用复杂字符串生成更复杂的中间格式。所有您可能需要的是形成一个CSV格式为您的减速机

对于到减速器的每一行,在输入的第一行中将有两个不同的节点:000和002。 制作一个单独的字符串,例如:

context.write(new Text("000"),new Text("LeftToRight#1"));
context.write(new Text("002"),new Text("RightToLeft#1"));
稍后在减速器中,您可以分别计算所有LeftToRights和RightToLeft,并为它们生成输出


要在单个文件中获得输出:将还原数设置为1。

假设您想做其他事情,然后计算给定顶点的阶数,我建议使用Java类库,该类库为图论提供对象和算法

将其视为解决问题的方法