最近在Hadoop下写Topk算法时,用到了TreeMap,它的API很适合该算法,比如:
TreeMap<Integer,Integer> tree = new TreeMap<Integer,Integer>();
tree.firstEntry().getValue(); //最小值
tree.lastEntry().getValue(); //最大值
tree.navigableKeySet(); //从小到大的正序key集合
tree.descendingKeySet();//从大到小的倒序key集合
tree.remove(tree.firstKey());//删除键值最小的一对键值
在其中犯了一个错误,耽搁了好久,就是TreeMap中不能使用Hadoop的“”封装类型“”,而必须使用java的封装类型。比如:
TreeMap<Integer,Text> tree = new TreeMap<Integer,Text>();
就是错的,不能使用Text,但是map/reduce函数的key、value必须使用Hadoop的封装类型,所以这里可以通过String来做中间转化。