博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop 排重优化
阅读量:7119 次
发布时间:2019-06-28

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

hot3.png

如果觉得有帮助的话就顶下吧

在统计的时候经常会用到排重,比如想统计每日登陆用户,但是一个用户一次多次登陆情况,或者一个产品被多少个用户下载。。等等情况

截图一是我之前写的代码:

191338_6sCh_1262585.png

下面是我优化后代码

public static class ReduceTask extends Reducer
 {    private IntWritable rval = new IntWritable();    private Multiset
 multiset=HashMultiset.create();    @Override    protected void reduce(Text key, Iterable
 values, Context context)            throws IOException, InterruptedException {        multiset.clear();        for (Text item:values){            multiset.add(item);        }        rval.set(multiset.elementSet().size());        context.write(key, rval);    }}

Multiset,会将相同的key,存到value种,只要将key遍历出来取值的个数就是排重后的数据。

前者是循环嵌套查找但是占用内存少 ,1179个组,平均每个组被分到6万条,最坏情况下(6w/2)^2*1179级别的循环,后者利用hashmap高效的存取值方式,是O(n)的级别,但是占用内存比较大

性能对比,下图是输入的数据,经过map的筛选,,

191818_Ek9x_1262585.png

下图是代码1执行的用时

191937_vi3R_1262585.jpg

执行了一小时还没结束,下图是代码二的时间 只要俩分钟不到,执行速度有大幅提升

192021_9gHF_1262585.png

转载于:https://my.oschina.net/osenlin/blog/500819

你可能感兴趣的文章
32位与64位原子操作的问题
查看>>
jquery 引用
查看>>
Xamarin 2.0编译报错缺少Google Maps Library
查看>>
Web网站的性能测试工具
查看>>
鼠标管理解决win8 插上usb/鼠标蓝屏或无效方法
查看>>
新手用WPF山寨QQ管家7.6(二)
查看>>
15条常用的视频音频编辑脚本命令
查看>>
转:算法合集之《从一道题目的解法试谈网络流的构造与算法》
查看>>
迷你MVVM框架 avalonjs v6.1发布,性能大幅提高
查看>>
effective c++ 条款12 赋值对象时勿忘其每一个成员
查看>>
Oracle Class7. 异常和游标管理
查看>>
常用工具小方法
查看>>
Java 中this的用法和静态方法的注意事项
查看>>
程序算法与人生选择
查看>>
修改Hadoop作业调度算法过程解析
查看>>
字符串循环移位
查看>>
java date相关
查看>>
XCode与Git的完美融合,不再依赖其它Git客户端
查看>>
What's the difference between a stub and mock?
查看>>
Revit中如何自定义快捷键
查看>>