数据分析—排序 排序是数据分析中最常⽤的操作,没有之⼀。 单字段升序: 利⽤ mapreduce ⾃⾝的排序机制,把需要排序的字段作为 key 即可 其它排序: ⾃定义排序规则 ⽅案⼀:⾃定义 key 1. ⾃定义类实现 WritableComparable 接⼝,设置泛型为⾃定义类 2. 声明需要排序的字段,添加 setter && getter 3. 实现接⼝的 3 个⽅法 write:序列化属性值为⼆进制 readFields:从⼆进制反序列化属性值 compareTo:⾃定义⼤⼩⽐较规则 4. 使⽤⾃定义 key 作为 map 输出的 key 类型 ⽅案⼆:⾃定义排序规则 1. ⾃定义类继承 WritableComparator 2. 重写⽗类⽆参构造⽅法,指定 key 的类型 super(Text.class, true); 3. 重写⽗类 compare(WritableComparable a, WritableComparable b) ⽅法,实现⾃定义⽐较规则 4. 设置 job 使⽤⾃定义排序规则 job.setSortComparatorClass() ⼆次排序(多字段排序): 先按照 ip 排序,ip 相同按照 count 排序 1. 把所有需要排序的字段放⼊ key 中 2. ⾃定义排序规则 3. 在 compare 中设置⽐较的顺序 action 升序,count 降序 ⾃定义聚合规则: 默认是 key 相同的 value ⾃动聚合 1. ⾃定义类继承 WritableComparator 2. 重写⽗类⽆参构造⽅法,指定 key 的类型 super(Text.class, true); 3. 重写⽗类 compare(WritableComparable a, WritableComparable b) ⽅法,实现⾃定义聚合规则 返回 0 聚合,否则不聚合 4. 设置 job 使⽤⾃定义聚合规则 job.setGroupingComparatorClass() Java 中的排序: Java 中的所有排序都依赖 Comparable 进⾏⼤⼩⽐较的,并且都是升序排列 不能控制排序的⽅式,但是可以控制⼤⼩⽐较的结果 通过控制⼤⼩⽐较结果来影响排序结果 实现 Comparable 接⼝需要实现 compareTo ⽅法 返回值只看类型,不看数值 负数 this < o 0 this = o 正数 this > o ⾃定义排序,就是⾃定⽐较⼤⼩的规则,实现 compareTo ⽅法 正常的⼤⼩⽐较 == 升序 取反 == 降序
- 粉丝: 168
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助