使用地图中的键减少值来获取值

时间:2015-05-28 09:20:53

标签: java hadoop mapreduce

映射器输入:

hi how are you 
how is your  job 
how is your family
what is hadoop hi  

减速机输入:

hadoop[1]
hi[1,1]
how[1,1,1]
is[1,1,1]
your[1,1]

用于存储和检索数据的映射器逻辑:

HashMap<String,Integer> hm=new HashMap<String,Integer>();  
 hm.put("hadoop",[1]);  
 hm.put("hi",[2]);  
 hm.put("is",[3]);  

 String val=(String)newmap.get("is");//  
output.collect(new Text(text),new Text(n))

 }  

我的问题是,我想打印“是”值(即3)但我不希望我的代码对每个输入字符串执行比较。我的代码最后只能搜索一次(在插入所有键值对之后)。

示例:

如果我有1000个键值对,那么它应该首先插入所有键值对,然后搜索应该从(String val=(String)newmap.get("is"))开始。

1 个答案:

答案 0 :(得分:0)

我们可以为reducer输入中的所有值传递相同的键。例如

(1,hadoop)
(1,hi1)
(1,hadoop)....

然后我们在iterable方法中的reducer方法中添加不同字符串标记的计数: -

HashMap<String,Integer> hm=new HashMap<String,Integer>();  

Public void reduce(Intwritable key, Iterable(Text) values, Context context){
int i=1
String token= values.toString();
if(hm.get(token)== null){
hm.put(token,i);
}else{
i=hm.get(token)+1;
hm.put(token,i);
}
}

在可迭代循环之后,我们可以输出结果。

String val=(String)hm.get("is");//  
context.write(NUllwritable.get(),new Text(val);