大文本合并去重有什么比较快的方法?

2014-03-09 15:47:09 +08:00
 ooh
多个文本文件,单个上千万,数百万行,数十万,数万都有,考虑到数据合并后肯定有很多重复的,现在采用的是先sort>uniq>cat>sort>uniq
想问的是有更快捷的方法吗?
2707 次点击
所在节点    问与答
6 条回复
9hills
2014-03-09 16:02:02 +08:00
上千万行去重用sort的效率很低,而且做了额外操作,因为你只是要去重,而不是排序

用awk数组来实现很简单很快,而且内存占用相当于hash表

cat 一堆文件 | awk '{ if (!seen[$0]++) { print $0; } }'
9hills
2014-03-09 16:07:28 +08:00
awk的这种方法的缺陷是内存占用,大约5000w条去重后的数据,计算过程估算占几个G

但是肯定比sort占的少,上次有同事在机器上上千万行sort,把机器内存打爆了
ooh
2014-03-09 16:11:44 +08:00
@9hills thx,我试试,因为单行数据都是比较简单的数据,所以上千万行sort >> 还比较轻松
alexapollo
2014-03-09 16:50:52 +08:00
map(hash_insert, row)
reduce(hash_insert, row)
ooh
2014-03-09 18:02:28 +08:00
@alexapollo 弱弱的问一下,这是怎么用的?
9hills
2014-03-09 18:04:45 +08:00
@ooh MapReduce , 如果你的数据量单机搞不定,就用map reduce吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/103522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX