Подтвердить что ты не робот

Странный Джексон Незаконный символ ((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]

Есть ли у кого-нибудь какие-либо предложения относительно причины этого?

4b9b3361

Ответ 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