WritableComparable排序

 

 

  1. 因爲map、reduce 之間傳遞的參數是通過本地持久化來實現,所以需要實現序列化接口。但由於Java的 Serializable接口是一個重量級的API,所以Hadoop自定義一套新的API。
  2. 如果傳遞的參數是基本類型和字符串,可以直接使用Text,LongWritable,IntWritable 。但如果是自定義的 Java Bean,就需要自己實現Writable接口。
  3. Writable接口有兩個方法需要實現:
  •      write(DataOutput var1) 會在序列化的時候被調用
  •      readFields(DataInput var1) 方法會在反序列化的時候被調用

    4. 默認情況下,從map端到reduce端的鍵值對傳輸會按照key進行排序。假設map端輸出的key是Text,無需實現其compareTo方法,因爲系統默認已經實現了。

 

自定義排序WritableComparable

原理分析

bean對象做爲key傳輸,需要實現WritableComparable接口重寫compareTo方法,就可以實現排序。

@Override
public int compareTo(FlowBean o) {
 
int result;
// 按照總流量大小,倒序排列
if (sumFlow > bean.getSumFlow()) {
result = -1;
}else if (sumFlow < bean.getSumFlow()) {
result = 1;
}else {
result = 0;
}
 
return result;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章