Olá galera,
Esse é meu primeiro post na comunidade, então, já vou pedindo desculpas casa faça alguma besteira agora. rsrs
Seguinte, estou fazendo curso de big data e em um exercício foi me pedido para escrever um código que analise linhas com 32 caracteres cada e retorne o ano mês. O processamento será feito no Hadoop.
Só que não consegui finalizar o código.
Texto a ser lido no txt:
201505011000######PEN__DRIVE00950
Classe Mapper (Mapeia o arquivo texto .txt)
package menorPreco;
public class MenorPrecoMapper extends Mapper <LongWritable, Text, Text, IntWritable> {
@override
public void map(LongWritable key, Text value, Context context)
throws IoException, InterruptedException{
String line = value.toString();
String ano_mes = line.substring(1,6);
int precoVenda;
precoVenda = Integer.parseInt(line.substring(28,32));
context.write(new Text(ano_mes), new IntWritable(precoVenda));
}
Então, após essa fase, criei outra classe para fazer a redução dos dados:
package menorPreco;
public class MenorPrecoReducer
extends Reducer <Text, IntWritable, Text, IntWritable> {
@override
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException,
InterruptedException{
int minValor = Integer.MIN_VALUE;
for (IntWritable value : values) {
minValor = Math.min(minValor, value.get());
}
context.write(key, new IntWritable(minValor));
}
}
Ao processar os dados é me retornado um resultado estranho (-[telefone removido]) e deveria ser 0950:
Vocês conseguem me ajudar onde estou errando. Ou seja, porque o java está retornando -[telefone removido].
O Texto 01505 era pra ser na realidade 201505 (maio de 2015), isso imagino que se deve a uma posição errado do médoto substring que deveria estar em “substring(0,6)”, por exemplo.