public class GroupComparator implements RawComparator<MyBinaryKey> {

  @Override
public int compare(MyBinaryKey o1, MyBinaryKey o2) {
return o1.toString().compareTo(o2.toString());
} @Override
public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
return WritableComparator.compareBytes(b1, s1, Long.SIZE / 8 + Integer.SIZE / 8 * 3, b2, s2, Long.SIZE / 8 + Integer.SIZE / 8 * 3);
} } public abstract class UVBinaryKey extends BinaryComparable implements WritableComparable<BinaryComparable>{
//根据需要添加属性;
@Override
public void readFields(DataInput in) throws IOException { } @Override
public byte[] getBytes() { } } public class MyPartitioner extends Partitioner<MyBinaryKey, NullWritable> { /**
* 根据uv/ip取模分区,保证相同uv/ip落在同一分区
*/
@Override
public int getPartition(MyBinaryKey key, NullWritable value, int numPartitions) { int k=0;
for(byte b : key.getAttr()){
k+=b&0xff;
}
return k%numPartitions;
} } job.setMapOutputKeyClass(UVBinaryKey.class);
job.setGroupingComparatorClass(GroupComparator.class);
job.setPartitionerClass(MyPartitioner.class); map 略
 combiner(根据需要添加)
reduce中的实现:
@Override
protected void reduce(UVBinaryKey key, Iterable<NullWritable> values, Context context)
throws IOException,
InterruptedException {
long count = 0;
byte[] tbsign = null;
for (NullWritable nullWritable : values) {
byte[] attr = key.getAttr();
if (tbsign == null) {
tbsign = attr;
count++;
}
if (tbsign != null) {
if (tbsign.length != attr.length) {
count++;
tbsign = attr;
} else {
for (int i = 0; i < tbsign.length; i++) {
if (tbsign[i] != attr[i]) {
count++;
tbsign = attr;
break;
}
}
}
} }
StringBuffer out = new StringBuffer();
out.append(new String(key.getCity()))
.append(Constants.FIELDS_TERMINATED).append(count);
context.write(new Text(out.toString()), NullWritable.get()); }

Mapreduce实例-分组排重(group by distinct)的更多相关文章

  1. MapReduce实例2(自定义compare、partition)& shuffle机制

    MapReduce实例2(自定义compare.partition)& shuffle机制 实例:统计流量 有一份流量数据,结构是:时间戳.手机号.....上行流量.下行流量,需求是统计每个用 ...

  2. SQL 数据排重,去掉重复数据 有用

    .最大的错误:    在对数据排重的时候,首先想到的就是Distinct,虽然这很管用,但多数场合下不适用,因为通常排重后还要做进一步处理,比如对编号排重后要按日期统计等. 无法排重的Group by ...

  3. 《MYSQL》----字符串的复杂函数,检索的七-天-排-重

    接到了一个新的需求,拿到需求的时候瞬间有点头大,因为实在是有些棘手. 我们这个系统本身是个接口系统,总接口数大概在200个左右.外部会有很多用户在 不同的时间拿着不同参数去调我们的这些接口,用户的调集 ...

  4. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  5. MapReduce实例&YARN框架

    MapReduce实例&YARN框架 一个wordcount程序 统计一个相当大的数据文件中,每个单词出现的个数. 一.分析map和reduce的工作 map: 切分单词 遍历单词数据输出 r ...

  6. 转:C#微信公众号开发之接收事件推送与消息排重的方法

    本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法.分享给大家供大家参考.具体分析如下: 微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这 ...

  7. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  8. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  9. linux取某个字段排重

    排重统计 cat a.txt | awk -F ';' '{print $2}' | sort -u | wc -l

随机推荐

  1. SMB协议概述

    一.概述 SMB(Server Message Block)是由微软开发的一种软件程序级的网络传输协议,主要用来使得一个网络上的计算机共享计文件.打印机.串行端口和通讯等资源.它也提供认证的进行进程间 ...

  2. WhatsApp & Tasker for Android – Read & Write messages

    WhatsApp & Tasker for Android – Read & Write messages The requirement for the automation is ...

  3. jquery easyui combobox设置默认选中第一项

    combobox的内容是从后台获取的json, js截取: var data = $('#id').combobox('getData'); $("#id ").combobox( ...

  4. window api 监控

    http://pnig0s1992.blog.51cto.com/393390/704189

  5. 29防止程序集被篡改仿冒,全局程序集缓存GAC

      为什么需要强名称程序集和数字签名 有一个类库项目ClassLib,对应的程序集是ClassLib.dll.当前控制台项目引用ClassLib.dll程序集的方式有2种: 1.通过添加现有项目 文件 ...

  6. spring事务的隔离级别(透彻理解)

    1.spring 事务这个东西,是轮子,每个service,都需要用到.所以干脆就做在框架层实现. 2.spring是怎么给你的service方法加事务的呢?jdk动态代理,会针对每个service类 ...

  7. java转换emoji表情

    /** * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) * @param str * 待转换字符串 ...

  8. Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:

    Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件: public static String post(String actionU ...

  9. Dictionary GetOrAdd

    public static TValue GetOrAdd<TKey,TValue>( this Dictionary<TKey,TValue> dictionary, TKe ...

  10. PhpSpreadsheet生成Excel时实现单元格自动换行

    PhpSpreadsheet是PHPExcel的替代版本,PHPExcel的作者已经停止了更新,今天尝试了使用PhpSpreadsheet生成Excel的时候支持单元格内的自动换行,发现用法其实差不多 ...