Im пытается разбить записи на слова, основанные на не буквенно-цифровых символах, считать первую букву в каждом слове и получить общее появление первого алфавита в каждом слове. Ниже приведена логика класса Mapper, которую я пытался выполнить.StringIndexOutOfBoundsException в моем коде MapReduce
public void map(LongWritable key, Text value, Context ctx) {
String line = value.toString();
String[] split = line.split("\\W+");
String firstChar;
for(String words: split) {
firstChar = String.valueOf(words.charAt(0));
try {
ctx.write(new Text(firstChar), new IntWritable(1));
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Исключение:
Error: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at com.hadoopexp.mapper.MapperClass.map(MapperClass.java:17)
at com.hadoopexp.mapper.MapperClass.map(MapperClass.java:1)
Но Im получение StringIndexOutOfBounds исключение для этой логики на линии:
firstChar = String.valueOf(words.charAt(0));
Я поставил несколько пустых строк в файле ввода только чтобы увидеть, если он работает. (например, ниже)
Liverpool
Manchester
London
Toronto ? ?? !!12 32
Может ли кто-нибудь помочь мне в том, как исправить логику. Любая помощь действительно ценится.
Большое спасибо Mureinik. Это работает. – Sidhartha