2017-06-21 47 views
0

美好的一天,我不知道如果我的標題是最好的一個,但我有這個名單:在Apache的Hadoop的返回日期,但按名稱排序和價值

用於如
201505011000######PEN DRIVE01470 
201505011000#######NOTEBOOK11470 
201605011000#######NOTEBOOK21471 
201705011000#######NOTEBOOK21472 
201705011000###GAVETA DE HD01472 
201703011000###GAVETA DE HD01473 

凡:201505代表 後#簽署我有產品名稱,並在和價格01470代表14,70

我需要做的是獲得每種產品的較低價格並顯示該價格的年份和月份。 但我不知道這樣做,我可以顯示的是價格較低和產品。

這裏是我的程序: 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)); 
    } 
} 

減速器

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)); 
    } 
} 

有人能幫忙嗎?

+0

您可以查看二次排序,然後修改您的解決方案。這裏有一個代碼示例鏈接,可以幫助您解決問題。二級分類 – SurjanSRawat

回答

-1

你可以看看二次排序,然後修改你的解決方案。這裏有一個代碼示例鏈接,可以幫助您解決問題。 secondary-sort

+1

您提供的鏈接不足以回答問題。請將其作爲評論發佈,或者詳細闡述它以解決問題。 – philantrovert