如题
主要问题:千万级别处理起来会不会崩溃?
主要是去重
谢谢
1
jdhao 2019 年 7 月 15 日 via Android
自己做一个然后试一下不就知道了
|
2
yedanten 2019 年 7 月 15 日 via Android
得看业务情况啊,不知道你后续的处理是要做哪些操作,否则只是去重,最简单粗暴的转换为 set 就完事了
|
3
momo1999 2019 年 7 月 15 日
推荐用 64 位 Python,加内存就是了。
|
4
lithiumii 2019 年 7 月 15 日
list(set(li)
崩溃了就是你电脑不行!(滑稽 |
5
Takamine 2019 年 7 月 15 日 既然都能打算一次性把 4000 个元素放到一个 list 里面操作,不如就直接再导入 Excel 去重:doge:。
|
6
chengxiao 2019 年 7 月 15 日
这种建议直接上 MongoDB 然后设置索引唯一去重
|
7
nutting 2019 年 7 月 15 日
内存里的操作怕啥,比数据库强多了,随便搞
|
8
ipwx 2019 年 7 月 15 日
In [4]: N = 10**8
In [5]: arr = np.random.randint(0, N, size=N) In [6]: len(arr) Out[6]: 100000000 In [7]: %timeit set(arr) 36 s ± 122 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) 给你一个时间作参考。。。 |
9
ytmsdy 2019 年 7 月 15 日
先分段排序,然后去重。
|
10
v2mo OP 几千万的数据,一台电脑运行,有可行性吗?
|
12
Universe 2019 年 7 月 15 日 via Android
看精度要求,不高的话布隆过滤器可以一试
|
13
pcdRob 2019 年 7 月 15 日
几千万而已 洒洒水啦
|
14
fuxiuyin 2019 年 7 月 15 日
首先,这 4 千万个元素肯定是要便利一遍的,除非你的数据有什么特殊的规律。
其次,要看这 4 千万存在哪,内存?文件?网络? 最后,如果没有优化空间不可避免的要对 4 千万数据过一遍那就看想优化内存还是想优化时间了,不过最快可能也就是楼上 8 楼给的。 |
15
mengzhuo 2019 年 7 月 15 日
4 千万 uint32,最大也就 40M 搞定了…… O ( N )操作而已
|
16
dji38838c 2019 年 7 月 15 日
这样都不肯用 pandas 吗?
|
17
ruandao 2019 年 7 月 15 日
布隆过滤器
|
18
ruandao 2019 年 7 月 15 日
想了想, 好像不需要
千万,也就 MB 级别吧 |
19
janxin 2019 年 7 月 15 日
数据都不说一下怎么分情况处理。
这种统一建议 list(set(data)) |
21
misaka19000 2019 年 7 月 15 日
不是,你也说一下你每条数据多大啊,每条数据 1kb 和每条数据 10mb 当然不一样
|
22
vincenttone 2019 年 7 月 15 日
既然 4 千万个元素能放进数组里,说明你内存就够用,去重就是了,就看算法对内存的使用和耗费的 cpu 时间了。
|
23
flyingghost 2019 年 7 月 15 日
4kw 个 int,160M,可以直接放内存。
设计一个分布尽可能均匀的散列函数(这一步不太确定我不是搞数学的。瞎拍一个 md5(obj)//4kw 的算法不知道效果怎么样?) 遍历每个 obj 求 hash,把 obj 的 index 放在对应的桶里。 如果桶里已有元素( hash 冲突),单独放在另一个冲突列表里。 对于冲突列表里的每个冲突 hash,遍历并精确对比每个 obj,从源数据集删除完全相同的 obj。 稍微注意一下 getObj(index)的 O(1)复杂度,理论上可以应对任意量的数据了。 |
24
princelai 2019 年 7 月 15 日
@ipwx #8 只替换最后一步
%timeit np.unique(arr) 11.4 s ± 401 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) |
25
dyllanwli 2019 年 7 月 15 日
|
26
scalaer 2019 年 7 月 15 日
看看 bitmap
|
27
lihongjie0209 2019 年 7 月 15 日
@mggis0or1 bitmap 对于非数字型的元素无法支持, 还是用布隆过滤器吧
|
28
reus 2019 年 7 月 15 日
你这水平,处理什么都会崩溃
自己不会试验吗 要问人,又不说清楚细节 |
29
limuyan44 2019 年 7 月 15 日 via Android
讨论这么多写个代码就这么难吗也没几行啊
|
30
NullErro 2019 年 7 月 15 日
想在内存跑的话,简单直接暴力的就是用 set, 推荐布隆过滤器;每个元素比较大的话可以考虑 mr,spark 或者其他分布式计算框架
|
31
arrow8899 2019 年 7 月 15 日
首先你要清楚数据的特征啊 整形?浮点数?短字符串?超长字符串?数据分布?重复概率?这些都会影响去重的效率!!!
V2EX √ 动手实践 × |
32
changs1986 2019 年 7 月 15 日
bloomfilter ?
|
34
thedog 2019 年 7 月 15 日
bitmap+1
|
35
shm7 2019 年 7 月 15 日 via iPhone
试试 numpy 吧,python list 遍历会检查类型,每次都会。
|
36
Hamniba 2019 年 7 月 15 日
@flyingghost #23
你这个就是 Hash Table 的思想,getObj(index) 是 O(1),但是求一遍 hash 还是得 O(n) 啊。 |
37
smdbh 2019 年 7 月 15 日
天天 4 千万,和每月,每年是有区别的。
但是,其实也没多大区别 |
38
Gooeeu 2019 年 7 月 15 日
Bloom Filter
|
39
sazima 2019 年 7 月 15 日
list(set(item))
|
40
sazima 2019 年 7 月 15 日
 粗略的感觉,耗时不到一秒... 也可能不到 0.5.
|
41
sazima 2019 年 7 月 15 日
不好意思我的数太简单了 -__-
|
42
skinny 2019 年 7 月 16 日
没有元素类型、数据大小信息,更没有电脑内存的信息,就直接问 Python 能不能,别人就只能瞎猜随便说了。
还有,千万不要用 C、C++、C#,甚至 Java 之类的语言的设计和使用经验来估计 Python 的内存用量,到时候如果楼主的电脑内存不够大,估计要死机。 |