我有一个Map-Reduce作业,其中mapper将记录转换为一个对象,即MyObject的实例,并使用Jackson将其编组为JSON。该值只是记录中的另一个文本字段。
以下是mapper的相关部分:
MyObject类由两个字段(均为字符串)、get/set方法和默认构造函数组成。其中一个字段基于网页爬取存储文本片段,但始终是字符串类型。
有人对这个问题的原因有什么建议吗?
以下是mapper的相关部分:
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());
Mapper的输出被发送到Combiner,它会解组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作业似乎运行良好,直到它处理到一些记录,这些记录很难访问(因为Mapper是从爬网生成这些记录),然后会抛出以下异常:
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]
有人对这个问题的原因有什么建议吗?