Al escribir un programa MapReduce, los datos pasados entre Map y Reduce deben ser del tipo ArrayList Al depurar y ejecutar, encontré este error:
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()
Después de consultar la documentación API del sitio web oficial, encontré este párrafo:
Un Escribible para matrices que contienen instancias de una clase. Todos los elementos de este escribible deben ser instancias de la misma clase. Si este escribible será la entrada para un Reductor, necesitará crear una subclase que establezca el valor de. tipo adecuado Por ejemplo: clase pública IntArrayWritable extiende ArrayWritable { public IntArrayWritable() { super(IntWritable.class);
Resulta que usted mismo necesita implementar una clase derivada de la clase ArrayWritable. Cuando la use, solo necesita implementar dos constructores.
clase estática pública TextArrayWritable extiende ArrayWritable { public TextArrayWritable() { super(Text.class); } public TextArrayWritable(String[] strings) { super(Text.class Text[] texts = new Text[strings.length]; (int i = 0; i < cadenas.longitud; i++) { textos[i] = nuevo Texto(cadenas[i] } conjunto(textos); }}