arrayindexoutofboundsexception

qmelpv7a  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(364)

我在Map部分得到数组索引越界错误。我的代码如下。我正在尝试从hdfs读取输入文件。有没有更好的方法来读取hdfs文件?

  1. public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text>
  2. {
  3. private Text key12 = new Text();
  4. private Text value = new Text();
  5. public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException
  6. {
  7. String line=value.toString();
  8. while((line = value.toString()) != null)
  9. {
  10. //StringTokenizer tokenizer = new StringTokenizer(line);
  11. //String field = tokenizer.nextToken();
  12. //
  13. String[] parts= line.split(" ");
  14. if(parts[0].contains("STN") == false)
  15. {
  16. String field=parts[0];
  17. String month=parts[3];
  18. String temp;
  19. if(parts[7].trim().equals(""))
  20. {
  21. temp=parts[8];
  22. }
  23. else
  24. temp=parts[7];
  25. //tokenizer.nextToken();
  26. //String month = tokenizer.nextToken();
  27. month=month.substring(4,6);
  28. //String temp = tokenizer.nextToken();
  29. String val = month+temp;
  30. key12.set(field);
  31. value.set(val);
  32. output.collect(key12, value);
  33. }
  34. }
  35. }
mlmc2os5

mlmc2os51#

有很多地方可能会出错,不管这个错误在哪里。如果…怎么办 parts 没有9个元素?如果它确实有9个元素,但其中一些是空的呢?如果…怎么办 line 里面没有空格字符吗?如果…怎么办 month 里面只有三个字?
处理好所有这些情况,你的问题就会得到解决。
作为旁白,使用

  1. if(!parts[0].contains("STN"))

而不是

  1. if(parts[0].contains("STN") == false)

并考虑提取一些字符串(例如 "STN" 以及 " " 进入 private static final String 变量。这将大大提高你的表现。

相关问题