Странный Джексон Незаконный символ ((CTRL- CHAR, код 0)) Исключение в Map Reduce Combiner
У меня есть работа по сокращению карты с помощью mapper, которая берет запись и преобразует ее в объект, экземпляр MyObject, который сортируется в JSON с помощью Jackson. Это просто другое текстовое поле в записи.
Соответствующий фрагмент устройства отображения выглядит примерно так:
ObjectMapper mapper = new ObjectMapper();
MyObject val = new MyObject();
val.setA(stringA);
val.setB(stringB);
Writer strWriter = new StringWriter();
mapper.writeValue(strWriter, val);
key.set(strWriter.toString());
Выходы обработчика отправляются в комбайнер, который отключает объект JSON и объединяет пары ключ-значение. Это концептуально очень просто и что-то вроде:
public void reduce(Text key, Iterable<IntWritable> values, Context cxt)
throws IOException, InterruptedException {
int count = 0;
TermIndex x = _mapper.readValue(key.toString(), MyObject.class);
for (IntWritable int : values) ++count;
...
emit (key, value)
}
Класс MyObject состоит из двух полей (обе строки), методов get/set и конструктора по умолчанию. В одном из полей хранятся фрагменты текста на основе веб-обхода, но всегда это строка.
public class MyObject {
private String A;
private String B;
public MyObject() {}
public String getA() {
return A;
}
public void setA(String A) {
this.A = A;
}
public String getB() {
return B;
}
public void setIdx(String B) {
this.B = B;
}
}
Моя работа MapReduce работает нормально до тех пор, пока не достигнет определенных записей, к которым я не могу легко получить доступ (потому что картограф генерирует записи из обхода), и возникает следующее исключение:
Error: com.fasterxml.jackson.core.JsonParseException:
Illegal character ((CTRL-CHAR, code 0)): only regular white space (\r, \n, \t) is allowed between tokens
at [Source: [email protected]; line: 1, column: 3]
Есть ли у кого-нибудь какие-либо предложения относительно причины этого?
Ответы
Ответ 1
Вы можете использовать StringUtils из сообщества apache, чтобы избежать строки - https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringEscapeUtils.html#line.89
или вы можете выборочно заменить управляющие символы из строки перед json-маршалингом.
вы также можете обратиться к этому сообщению - Незаконный символ - CTRL- CHAR