jsonformat example java json hadoop jackson marshalling

example - jsonformat java



Extraño carácter ilegal de Jackson((CTRL-CHAR, código 0)) Excepción en el mapa Reducir Combinador (1)

Puede usar StringUtils de apache commons para escapar de la cadena: https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringEscapeUtils.html#line.89

o puede reemplazar selectivamente los caracteres de control de la cadena antes de json marshaling.

También puede consultar esta publicación - Carácter ilegal - CTRL-CHAR

Tengo un trabajo Map-Reduce con un mapeador que toma un registro y lo convierte en un objeto, una instancia de MyObject, que se calcula a JSON usando Jackson. El valor es solo otro campo de texto en el registro.

La pieza relevante del mapeador es algo como lo siguiente:

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());

Las salidas del asignador se envían a un Combinador que elimina el objeto JSON y agrega pares de clave-valor. Es conceptualmente muy simple y es algo como:

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) }

La clase MyObject consta de dos campos (ambas cadenas), métodos get / set y un constructor predeterminado. Uno de los campos almacena fragmentos de texto basados ​​en un rastreo web, pero siempre es una cadena.

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; } }

Parece que mi trabajo MapReduce se está ejecutando bien hasta que alcanza ciertos registros, a los que no puedo acceder fácilmente (porque el asignador está generando los registros de un rastreo), y se lanza la siguiente excepción:

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: java.io.StringReader@5ae2bee7; line: 1, column: 3]

¿Alguien tendría alguna sugerencia sobre la causa de esto?