执行时java.lang.ArrayIndexOutOfBoundsException package com.HadoopExpert; 导入java.io.IOException; 导入org.apache.hadoop.io.IntWritable; 导入org.apache.hadoop.io.LongWritable; 导入org.apache.hadoop.io.Text; 导入org.apache.hadoop.mapreduce.Mapper; 公共类SumMapper扩展映射器{ 公共void映射(LongWritable键、文本值、上下文con)引发IOException、InterruptedException{ 字符串s=value.toString(); String[]words=s.split(“,”); 字符串性别=单词[4]; int sal=Integer.parseInt(字[2]); con.write(新文本(性别),新可写(sal)); } }

执行时java.lang.ArrayIndexOutOfBoundsException package com.HadoopExpert; 导入java.io.IOException; 导入org.apache.hadoop.io.IntWritable; 导入org.apache.hadoop.io.LongWritable; 导入org.apache.hadoop.io.Text; 导入org.apache.hadoop.mapreduce.Mapper; 公共类SumMapper扩展映射器{ 公共void映射(LongWritable键、文本值、上下文con)引发IOException、InterruptedException{ 字符串s=value.toString(); String[]words=s.split(“,”); 字符串性别=单词[4]; int sal=Integer.parseInt(字[2]); con.write(新文本(性别),新可写(sal)); } },hadoop,Hadoop,这是我的映射器类代码,我想通过索引m获取数组获取一个超出绑定索引的eror aarray thanx提前根据您在评论中提供的数据,性别索引应为3。注意,在java中,数组的索引从0开始 在使用数据之前,您应该始终检查数据,例如: package com.HadoopExpert; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWrita

这是我的映射器类代码,我想通过索引m获取数组获取一个超出绑定索引的eror aarray
thanx提前

根据您在评论中提供的数据,性别索引应为
3
。注意,在java中,数组的索引从
0
开始

在使用数据之前,您应该始终检查数据,例如:

package com.HadoopExpert;


import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;


  public class SumMapper extends Mapper<LongWritable, Text,Text,IntWritable>{


  public void map(LongWritable key, Text value, Context con) throws IOException, InterruptedException{

    String s = value.toString();
    String[] words = s.split(",");

    String gender  = words[4];
    int sal = Integer.parseInt(words[2]);

    con.write(new Text(gender), new IntWritable(sal));
}
}

您还应该考虑如何处理坏数据(先计数,然后忽略它,或者尝试修复它,等等)。

您能提供您正在读取的文件中的数据是什么样子的吗?请记住,编号从0开始,而不是从1开始。因此数组的第四个元素是单词[3],而不是单词[4]。101,艾哈迈德,30000,M,美国,1001102,萨加尔,40000,M,印度,1002 103,苏尼塔,30000,F,新加坡,1002 104,基肖尔,30000,M,印度,1003 105,南都,30000,M,印度,1004 106,艾哈迈德,30000,M,印度,1005 107,克兰蒂,20000,M,印度,1006 108,拉维,80000,M,印度,1007,尼基塔,30000,F,印度,1008 110,阿亚兹,30000,M,马拉西亚,1006 111,品基,30000,M,印度,1005 101,拉菲,70000,M,印度,1003 111,曼塔,90000,F,加拿大,1009维夫蒂姆说的,在你的例子中,性别在指数3中。但这并不是导致错误的原因。我认为导致错误的原因是某些行可能没有指定所有字段,您应该对此进行解释。
if (words.length > 3) {
    String gender = words[3];
    ......
}