mapreduce中的wordcount将结果降序输出
怎么能把wordcount的结果降序输出,然后只输出最多的前五个单词求帮助啊最好是有具体的代码...
怎么能把wordcount的结果降序输出,然后只输出最多的前五个单词 求帮助啊
最好是有具体的代码 展开
最好是有具体的代码 展开
1个回答
展开全部
这个结果的排序是在sort阶段,根据key来进行排序,Hadoop默认采用的是基本排序策略,你要想实现自己的排序算法,得要自定义===》这是大体的思路。
下面是一个自定义的key2 ;
public static class MyText implements WritableComparable {
private String key = "";
private int value = 0;
public MyText() {
}
public MyText(String key, int value) {
this.key = key;
this.value = value;
}
@Override
public void write(DataOutput out) throws IOException {
out.writeUTF(key);
out.writeInt(value);
}
@Override
public void readFields(DataInput in) throws IOException {
key = in.readUTF();
value = in.readInt();
}
@Override
public int compareTo(Object o) {
MyText other = (MyText) o;
return -this.key.compareTo(other.key);
}
public int CompareToValue(Object o) {
MyText other = (MyText) o;
return this.value - other.value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
这样 就可以根据compareTo方法实现倒序排列,根据CompareToValue方法实现判断值的大小,你再reduce端进行下改写,在cleanup的时候写出就可以了~
Hadoop1小组回答,仅供参考......
追问
你好,我还想问下怎么样能只输出前五个结果 而不是全部
追答
这个你在写reduce函数的时候,可以把超过5个的全部丢掉啊,只把你要的结果在cleanup的时候写到context里面就可以了,
这里面的reduce的逻辑,就是维护一个数组, 每读入一条记录的时候,排下序,保证是5个最大的,最后把这个数组循环写出不就可以了(仅仅是一个方案建议)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询