数据占了 35g 左右存储,有标识每条数据的 id,还剩大约 7g 空闲空间,需要对这 35g 的数据去重,内存是 8g 的.如何对数据进行去重?
|
alalidaFeb 4, 2020 via Android
1
你先想一想目标时间复杂度和空间复杂度。去重意味要查找,那最好也就对数时间复杂度。此外要看能否分批处理,数据有无规律。可以分批处理也会快很多。总之要先看数据长什么样。
|
|
otakustayFeb 4, 2020
2
数据是 35G,其中 id 部分有多大?不大的话哈希应该是有办法建起来的……
|
|
shuangyeyingFeb 4, 2020
3
是裤子么?
|
|
opengpsFeb 4, 2020
4
去重字段仅仅是 id 字段?还是全字段匹配?
|
|
malusamaFeb 4, 2020
5
bloomfilter 有误差率
|
|
6
@opengps 每个 id 字段标识这条数据
|
|
7
@shuangyeying 不是的,亲
|
|
8
@alalida 在用分片,时间换空间,但很慢,每次 10w 条
|
|
9
@malusama 有空间限制的
|
|
10
@alalida 经过分析,每条数据里边的 id 唯一标识这条数据
|
|
wysnylcFeb 4, 2020 via Android
11
把 id 提出来,还能有 35g ?
|
|
ho121Feb 4, 2020 via Android
12
对每条数据 hash 后存到哈希表或者二叉树中。
hash 算法也不需要碰撞率很低的那种,比如 crc32,crc64 这种简单的就行,这样可以加快 hash 速度,并减少内存使用。当碰到 hash 相同的,需要做完全匹配来判断数据是否真的是相等。 哈希表或者二叉树每个节点要存下每个 hash 对应的 id (可能有多个)。 数据用流式读取,或者扔进数据库中。 手机码字,有点乱 |
|
13
还以为是 35 克数据
|
|
14
@grimpil 哈哈哈哈哈哈
|
|
keepeyeFeb 4, 2020
15
遍历所有数据,id 字段走布隆过滤器去重 用不了多少内存
|
|
mxT52CRuqR6o5Feb 4, 2020 via Android
16
Bitmap
|
|
binuxFeb 4, 2020
17
如果数据>>id,拿 id 出来随便爱怎么搞怎么搞
如果数据就是 id,每 7g 分片排序再 merge 排序。 |
|
zengguiboFeb 4, 2020
18
如果只是文本数据,压缩一下传到性能强内存大的机器上,直接导入内存去重
|
|
TlvncksFeb 4, 2020
19
引用;@grimpil #13 还以为是 35 克数据
------------------------------------------------------- 我也看了半天,还在想 35g 啥玩意?难道想提纯?? |
|
RekklesFeb 4, 2020
20
数据 hash 然后对比去重?
有个笨一点的办法,数据导入 db 做唯一索引 一条一条导入,导入失败的就是重复的,牺牲时间换空间。 |
|
coolcfanFeb 4, 2020 via Android
21
跟 13 楼一样,看到是小写第一反应是 35 克数据……
|
|
suotmFeb 4, 2020
22
取 3.5G 做好去重的脚本,然后开一个 64GB 内存的云主机跑
|
|
lululauFeb 4, 2020 via iPhone
23
35g? 用什么称的?
|
|
hhhsuanFeb 4, 2020 via Android
24
大小写很重要啊
|
|
netnrFeb 4, 2020
25
直接执行开窗函数按 id 分组排序取大于 1 的项并删除,难道顶不住?
|
|
ofblytFeb 4, 2020
26
最近做饭做的,看到 35g 还想 35 克去重( zhong )是给什么去皮吗
|
|
yufeng0681Feb 4, 2020
27
根据 id 第一位进行文件分拣(切割到),假设有 26 个字母,10 个数字; 估计每个文件 1G 左右,那样问题就变成了 1G 文件的处理
|
|
gfreezyFeb 4, 2020
28
shell 里面 sort | uniq 就可以。内存不够的时候 sort 会自动交换到磁盘上。
https://unix.stackexchange.com/questions/383056/sort-huge-list-130gb-in-linux |
|
29
@lululau 电子秤吧
|
|
30
@ofblyt 姜吧
|
|
31
@gfreezy 存储有限的,都在数据库里
|
|
32
@yufeng0681 id 是纯数字,剩余的空间只有 7 个 G
|
|
fuyeFeb 5, 2020 via Android
34
create table tmp(id bigint,unique key id ( id ))
insert into tmp select id from 你的表 |