Ao escrever um programa MapReduce, os dados transmitidos entre Map e Reduce precisam ser do tipo ArrayList. Ao depurar e executar, encontrei o seguinte erro:
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()
Depois de verificar a documentação oficial da API do site, encontrei este parágrafo:
Um gravável para matrizes contendo instâncias de uma classe Os elementos deste gravável devem ser todos instâncias da mesma classe. Se este gravável for a entrada para um Redutor, você precisará criar uma subclasse que defina o valor como sendo do. tipo adequado. Por exemplo: public class IntArrayWritable estende ArrayWritable { public IntArrayWritable() { super(IntWritable.class);
Acontece que você mesmo precisa implementar uma classe derivada da classe ArrayWritable. Ao usá-la, você só precisa implementar dois construtores.
classe estática pública TextArrayWritable estende ArrayWritable { public TextArrayWritable() { super(Text.class } public TextArrayWritable(String[] strings) { super(Text.class Text[] texts = new Text[strings.length]); (int i = 0; i < strings.length; i++) { textos[i] = new Text(strings[i] } set(textos); }}