Bonjour, je ne sais pas si mon titre est le meilleur mais je cette liste:une date, mais trier par nom et la valeur dans Apache Hadoop
201505011000######PEN DRIVE01470
201505011000#######NOTEBOOK11470
201605011000#######NOTEBOOK21471
201705011000#######NOTEBOOK21472
201705011000###GAVETA DE HD01472
201703011000###GAVETA DE HD01473
Lorsque, pour par exemple .: 201505
représentent l'année et le mois, après le signe #
j'avais le nom du produit, et dans le prix et le 01470
représentent 14,70
.
Ce que je dois faire est d'obtenir le prix plus bas pour chaque produit et de montrer l'année et le mois de ce prix. Mais je ne sais pas faire cela, ce que je peux montrer sont le prix inférieur et le produit.
Voici mon programme: MAPPER
package pkg.produto;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class MinProdutoMapper
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 = line.substring(0, 6);
String produto = line.substring(13, 27);//Nome do produto
produto = produto.substring(produto.lastIndexOf("#") + 1);
//String produto_ano = ano+produto ;
int valor = Integer.parseInt(line.substring(27, 32));//Valor do produto
context.write(new Text(produto), new IntWritable(valor));
}
}
RÉDUCTEUR
package pkg.produto;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class MinProdutoReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int minValue = Integer.MAX_VALUE;
for (IntWritable value : values) {
minValue = Math.min(minValue, value.get());
}
context.write(key, new IntWritable(minValue));
}
}
Quelqu'un peut-il aider?
Vous pouvez donner un coup d'oeil au tri secondaire, puis modifier votre solution. Voici un lien avec un exemple de code qui peut vous aider à résoudre votre problème. secondary-sort – SurjanSRawat