免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9063 | 回复: 27
打印 上一主题 下一主题

大数据去重复,求速度 [复制链接]

论坛徽章:
1
午马
日期:2013-11-25 16:01:44
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-21 21:49 |只看该作者 |倒序浏览
本帖最后由 gongyonghui2 于 2014-05-22 14:28 编辑

数据有1亿5千万行3列
每行均是数字,形如


数据重复是指:任意两行,每一行的三个数排序后,这两行一样,那么就是重复。
求perl能达到去重复效率最高的方法。
数据链接:http://pan.baidu.com/s/1dDekRLJ

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2014-05-21 22:03 |只看该作者
本帖最后由 yinyuemi 于 2014-05-21 22:04 编辑

回复 1# gongyonghui2

没测试~
    perl -nale 'print if !h{(join "@",sort @F)}++' file

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-05-22 08:33 |只看该作者
perl怕是不行了.
直接用 sort 吧. 或者用 sort的算法.

用楼上的方法, 估计 OOM的可能性大.

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
4 [报告]
发表于 2014-05-22 09:24 |只看该作者
要是偶的话,把文件切成小块,用merge sort排序,然后去重就简单了。
不过你这要的是速度,一起坐等高手咯{:3_193:}

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2014-05-22 09:52 |只看该作者
本帖最后由 MMMIX 于 2014-05-22 09:52 编辑

回复 1# gongyonghui2


    你现在效率不高的方法是什么?处理该文件需要多少时间/内存?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2014-05-22 09:57 |只看该作者
q1208c 发表于 2014-05-22 08:33
perl怕是不行了.


问题不大,除了输入文件重复行很少可能导致内存溢出。

论坛徽章:
1
午马
日期:2013-11-25 16:01:44
7 [报告]
发表于 2014-05-22 10:42 |只看该作者
回复 5# MMMIX


    用的是sort {$a<=>$b} 后join成字串,然后再用hash去重复,但是sort的时间跑了大概20分钟还没有sort完,内存不够了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2014-05-22 11:32 |只看该作者
本帖最后由 MMMIX 于 2014-05-22 11:33 编辑

回复 7# gongyonghui2


    完整的代码贴上来看看。另外,你机器有多少内存?

2楼的代码你测试过么?什么结果?

论坛徽章:
1
午马
日期:2013-11-25 16:01:44
9 [报告]
发表于 2014-05-22 13:46 |只看该作者
本帖最后由 gongyonghui2 于 2014-05-22 13:54 编辑

回复 8# MMMIX
  1. open IN,"tt1.txt";
  2. open OU,">","result.txt";
  3. my %hash=();

  4. while(<IN>){
  5.         chomp;
  6.         my $tmp=join "\t",sort {$a<=>$b} split /\t/;       
  7.         $hash{$tmp}++;
  8. }
  9. print "sortDone\n";
  10. while(my ($cc)=each %hash){
  11.         print OUT $cc,"\n";       
  12. }
复制代码
机器6G内存,2楼代码原理一样,也是用hash去重,命令行运行出错

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
10 [报告]
发表于 2014-05-22 14:03 |只看该作者
  1. >>> 150*1000*1000*12/(1024*1024)
  2. 1716.61376953125
复制代码
每个数字用32位为整数存储,内存就有1700MB,加上内部数据结构,估计物理内存hold不住了,一旦用上交换,那就遥遥无期了。这个例子更适合shell的“sort -n -k...”,自动处理外部排序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP