Mapreduce 文本到字符串映射减少

Mapreduce 文本到字符串映射减少,mapreduce,hadoop2,hortonworks-sandbox,Mapreduce,Hadoop2,Hortonworks Sandbox,我试图在Hortonworks沙盒中使用mapreduce2(纱线)分割一条线。 如果我尝试访问val[1],它会抛出ArrayOutOfBound异常,在我不拆分输入文件时可以正常工作 制图员: 公共类MapperClass扩展了Mapper{ 私人文本航空公司id; 私有文本名称; 私人文本国家; 私有文本值1; 公共无效映射(对象键、文本值、上下文) 抛出IOException、InterruptedException{ 字符串s=value.toString(); 如果(s.长度()>1

我试图在Hortonworks沙盒中使用mapreduce2(纱线)分割一条线。 如果我尝试访问val[1],它会抛出ArrayOutOfBound异常,在我不拆分输入文件时可以正常工作

制图员:

公共类MapperClass扩展了Mapper{
私人文本航空公司id;
私有文本名称;
私人文本国家;
私有文本值1;
公共无效映射(对象键、文本值、上下文)
抛出IOException、InterruptedException{
字符串s=value.toString();
如果(s.长度()>1){
字符串val[]=s.split(“,”);
写(新文本(“废话”),新文本(val[1]);
}
}
}
减速器:

public class ReducerClass extends Reducer<Text, Text, Text, Text> {

private Text result = new Text();

public void reduce(Text key, Iterable<Text> values, Context context)
        throws IOException, InterruptedException {

    String airports = "";

    if (key.equals("India")) {
        for (Text val : values) {
            airports += "\t" + val.toString();
        }
        result.set(airports);
        context.write(key, result);
    }
}
}
你能帮忙吗

更新:


发现它不会将文本转换为字符串

如果要拆分的字符串不包含逗号,则生成的字符串[]的长度为1,整个字符串的长度为val[0]

目前,您正在确保该字符串不是空字符串

if (s.length() > -1)
但您并不是在检查拆分是否会导致长度大于1的数组,而是假设存在拆分

context.write(new Text("blah"), new Text(val[1]));
如果没有拆分,这将导致越界错误。一种可能的解决方案是确保字符串至少包含1个逗号,而不是像这样检查它是否为空字符串:

String s = value.toString();
if (s.indexOf(',') > -1) {

    String val[] = s.split(",");
    context.write(new Text("blah"), new Text(val[1]));
}

您真的需要使用mapreduce2吗?有更简单的方法来分割字符串。例如String类中的
split()
方法或
StringTokenizer
classyes。我正在通过map reduce进行尝试@RosárioPereiraFernandesIt不会将文本转换为字符串。它在输出文件中打印空值@机库4358
String s = value.toString();
if (s.indexOf(',') > -1) {

    String val[] = s.split(",");
    context.write(new Text("blah"), new Text(val[1]));
}