使用hadoop mapreduce在文件上查找反向名称

使用hadoop mapreduce在文件上查找反向名称,hadoop,mapreduce,mapper,reducers,Hadoop,Mapreduce,Mapper,Reducers,您好,我有这个文件,我需要找到只有两位作者的出版物的作者的名字,他们至少在其中一位作者身上颠倒了他们的名字。 我制作的地图是这样的: package bigdatauom; import java.io.IOException; import java.util.ArrayList; import java.util.StringTokenizer; import org.apache.hadoop.io.IntWritable; import

您好,我有这个文件,我需要找到只有两位作者的出版物的作者的名字,他们至少在其中一位作者身上颠倒了他们的名字。 我制作的地图是这样的:

    package bigdatauom;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;

public class TokenizerMapper 
extends Mapper<Object, Text, Text, IntWritable> {

private final static IntWritable one = new IntWritable(1);
private Text keyAuthors = new Text();

public void map(Object key, Text value, Context context
        ) throws IOException, InterruptedException {    

    StringTokenizer authorslinetok = new StringTokenizer(value.toString(), "#");    

    while (authorslinetok.hasMoreTokens()) {
        String tempLine = authorslinetok.nextToken();

        if (tempLine.charAt(0) == '@') {
            tempLine = tempLine.substring(1);
            StringTokenizer seperateAuthorsTok = new StringTokenizer(tempLine, ",");
            ArrayList<String> authors = new ArrayList<String>();
            while (seperateAuthorsTok.hasMoreTokens()) {
                authors.add(seperateAuthorsTok.nextToken());
            }
            if (authors.size() == 2){
            keyAuthors.set(tempLine);
            context.write(keyAuthors, one);
            }
        }
    }

}
}
package bigdatauom;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.StringTokenizer;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Mapper;
公共类令牌映射器
扩展映射器{
私有最终静态IntWritable one=新的IntWritable(1);
私有文本键作者=新文本();
公共无效映射(对象键、文本值、上下文
)抛出IOException,InterruptedException{
StringTokenizer authorslinetok=新的StringTokenizer(value.toString(),“#”);
while(authorslinetok.hasMoreTokens()){
字符串tempLine=authorslinetok.nextToken();
if(tempLine.charAt(0)=='@'){
tempLine=tempLine.子字符串(1);
StringTokenizer separateAuthorstok=新的StringTokenizer(模板,“,”);
ArrayList authors=新建ArrayList();
while(单独的authorstok.hasMoreTokens()){
add(分别是authorstok.nextToken());
}
如果(authors.size()==2){
关键作者集(模板);
编写(关键作者,一名);
}
}
}
}
}
我需要有两个实例的减速器,并已在这个项目上工作了一个星期没有结果。
任何建议都将不胜感激,谢谢

您可以编写一个
CustomPartitioner
authors.size()==2的实例重定向到一个reducer您可以再解释一下吗我对hadoop很陌生抱歉。缩减器将只是wordcount的一个简单功能?当authors.size==2时,您需要做什么?当它不是时,您需要做什么?我只需要authors.size==2的出版物。然后检查两位作者是否有另一篇文章颠倒了他们的名字。例如,第一期出版物作者Alex,Nick和第二期出版物作者Nick,Alex将这些名称保存在一个文件中一次。不知道reducer中应该使用的算法,或者为了得到我想要的结果,我需要在wordcount的reducer上更改什么。