mapreduce中的wordcount将结果降序输出

怎么能把wordcount的结果降序输出,然后只输出最多的前五个单词求帮助啊最好是有具体的代码... 怎么能把wordcount的结果降序输出,然后只输出最多的前五个单词 求帮助啊

最好是有具体的代码
展开
 我来答
DotaAddress
2014-08-01 · 超过34用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:74.6万
展开全部

这个结果的排序是在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个最大的,最后把这个数组循环写出不就可以了(仅仅是一个方案建议)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式