从自定义比较器(实现RawComparator接口的方式)总结的经验

在MR中我们在Map阶段的排序可是通过两种方式

要比较的值为key

1)实现WriteComparator接口---比较简单使用

2)自定义比较器(实现RawComparator接口)

这里我们介绍一下第二种方式

1、我们要自定义一个比较器实现RawComparator接口

2、重写方法

为什么有两个方法呢?追一下源码

RawComparator接口继承了Comparator,所以有两个方法

第一个方法中,我们可以有如下理解:

1、这个方法先被调用

2、在此方法中,将字节数组中的数据先封装成要比较的类型,在调用第二个方法

3、比较封装好的类型

那么字节数组的封装如何编写呢?

我们可以通过找RawComparator的实现类,看那个实现类中的方法是如何写的,按照那个来编写即可(注意体会这种编程思想)

当自定义比较器写好后,在Driver中设置比较器为自定义比较器即可。

原文地址:https://www.cnblogs.com/atBruce/p/12401382.html

时间: 2024-10-13 18:06:26

从自定义比较器(实现RawComparator接口的方式)总结的经验的相关文章

TreeSet排序,存储自定义对象,自定义比较器示例

Set:无序,不可以重复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:判断元素的hashCode值是否相同. 如果相同,还会继续判断元素的equals方法,是否为true. |--TreeSet:可以对Set集合中的元素进行排序. 底层数据结构是二叉树. 保证元素唯一性的依据:compareTo方法return 0. TreeSet排序的第一种方式:让元素自身具备比较性. 元素需要实现Comparable接口,覆盖compareTo方法. 也种方式也成为

Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql

Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql 1. 图16.1:MySQL体系结构1 2. 16.7. 创建表create()虚拟函数:2 3. 16.8. 打开表 open()2 4. ---------------------------------------------------------------------------------------------------------------------2 5. 16.9. 实施基本的

创建一个自定义比较器

双列集合: -------------| Map  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复. ----------------| HashMap  底层也是基于哈希表实现 的. HashMap的存储原理: 往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素 的哈希码值,然后经过运算就可以算出该 元素在哈希表中的存储位置. 情况1: 如果算出的位置目前没有任何元素存储,那么该元素可以直接添加到哈希表中. 情况

sort方法和自定义比较器的写法

摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collections.sort()方法.对自定义对象排序时要自己重写比较器,对象数组则调用Arrays.sort(),对象集合则调用Collections.sort().两个方法默认都是升序,也可以重写比较器,实现降序. 对数组排序 sort函数模板, 以int型数组为例: Arrays.sort(int[] a, Comparator<Integer>

微信公众平台自定义菜单及高级接口PHP SDK

本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw1958/ SDK 源码: 1 /* 2 方倍工作室 http://www.cnblogs.com/txw1958/ 3 CopyRight 2014 www.doucube.com All Rights Reserved 4 */ 5 6 class class_weixin_adv 7 { 8

.NET中的三种接口实现方式

摘自:http://www.cnblogs.com/zhangronghua/archive/2009/11/25/1610713.html 一般来说.NET提供了三种不同的接口实现方式,分别为隐式接口实现.显式接口实现.混合式接口实现.这三种方式各有各的特点. 首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式.下面让我们来看一个隐式接口实现的例子: using System; internal class MyClass { public

两种访问接口的方式(get和post)

跨机器.跨语言的远程访问形式一共有三种:scoket发送数据包.http发送请求.rmi远程连接: http发送请求方式:分为post和get两种方式 importjava.io.IOException; importjava.io.InputStream; import java.util.Map; importjava.util.concurrent.atomic.AtomicInteger; importorg.apache.commons.httpclient.HttpClient; i

自定义比较器

1 /// <summary> 2 /// 自定义比较器 ZhangQC 2016.11.29 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <typeparam name="TV"></typeparam> 6 public class CommonEqualityComparer<T, TV> : IE

利用 ajax自定义Form表单的请求方式

需求场景:有时候单纯的form表单无法向后端传递额外的参数 比如需要action传递js异步生成的参数 ,form表单默认的action就无法满足需求,这时就需要我们自定义form表单的提交方式. html:(向后台传递对任务的评论内容,默认缺点:不能携带任务id) 1 <div> 2 <form action="#" id="form_comment"> 3 <textarea id="comment" requi