博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mapreduce实例-分组排重(group by distinct)
阅读量:5068 次
发布时间:2019-06-12

本文共 2677 字,大约阅读时间需要 8 分钟。

1 public class GroupComparator implements RawComparator
{ 2 3 @Override 4 public int compare(MyBinaryKey o1, MyBinaryKey o2) { 5 return o1.toString().compareTo(o2.toString()); 6 } 7 8 @Override 9 public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {10 return WritableComparator.compareBytes(b1, s1, Long.SIZE / 8 + Integer.SIZE / 8 * 3, b2, s2, Long.SIZE / 8 + Integer.SIZE / 8 * 3);11 }12 13 }14 15 public abstract class UVBinaryKey extends BinaryComparable implements WritableComparable
{16 //根据需要添加属性;17 @Override18 public void readFields(DataInput in) throws IOException {19 20 } 21 22 @Override23 public byte[] getBytes() {24 25 }26 27 }28 29 public class MyPartitioner extends Partitioner
{30 31 /**32 * 根据uv/ip取模分区,保证相同uv/ip落在同一分区33 */34 @Override35 public int getPartition(MyBinaryKey key, NullWritable value, int numPartitions) {36 37 int k=0;38 for(byte b : key.getAttr()){39 k+=b&0xff;40 }41 return k%numPartitions;42 }43 44 }45 46 47 48 job.setMapOutputKeyClass(UVBinaryKey.class);49 job.setGroupingComparatorClass(GroupComparator.class);50 job.setPartitionerClass(MyPartitioner.class);51 52 map 略
1 combiner(根据需要添加) 2 reduce中的实现: 3        @Override 4         protected void reduce(UVBinaryKey key, Iterable
values, Context context) 5 throws IOException, 6 InterruptedException { 7 long count = 0; 8 byte[] tbsign = null; 9 for (NullWritable nullWritable : values) {10 byte[] attr = key.getAttr();11 if (tbsign == null) {12 tbsign = attr;13 count++;14 }15 if (tbsign != null) {16 if (tbsign.length != attr.length) {17 count++;18 tbsign = attr;19 } else {20 for (int i = 0; i < tbsign.length; i++) {21 if (tbsign[i] != attr[i]) {22 count++;23 tbsign = attr;24 break;25 }26 }27 }28 }29 30 }31 StringBuffer out = new StringBuffer();32 out.append(new String(key.getCity()))33 .append(Constants.FIELDS_TERMINATED).append(count);34 context.write(new Text(out.toString()), NullWritable.get());35 36 }

 

转载于:https://www.cnblogs.com/sunxucool/p/3624812.html

你可能感兴趣的文章
基于Lucene3.5.0怎样从TokenStream获得Token
查看>>
一网打尽各类Java基本数据类型转换
查看>>
FlowLayout布局
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
sql注入【手工及一些工具】
查看>>
所有的jsp页面都放到WEB-INF目录
查看>>
Android开发环境搭建全程演示(jdk+eclipse+android sdk)
查看>>
如何修改SVN中的用户名和密码
查看>>
(转) 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)...
查看>>
TJOI2011书架(dp)
查看>>
C++ p63作业 1
查看>>
第七课 Zookeeper配置管理,分布式锁案例,运维管理,运维管理系统
查看>>
数的划分(动态规划)
查看>>
.Net EntityFramework学习笔记
查看>>
挣值管理(EVT)
查看>>
20180711-Java Number类
查看>>
考试系统优化——准备工作
查看>>