映射器输入:
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")
)开始。
答案 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);