Pandas 如何对无法一次性载入内存的大数据量去重?

发布于 2022-09-03 14:29:59 字数 155 浏览 27 评论 0

现在有大约1亿行数据,无法一次性载入内存,请问该如何去重?
目前想到方案是 read_table 方法设置 chunk_size 逐块读入,迭代每一块调用 unique 方法去重,但是这个方案好像只能对每一块载入内存的数据去重,如果重复数据分散在不同块就没有办法去掉。请教有没有更好的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

反话 2022-09-10 14:29:59

更新下实操测试:
硬件: Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz + 256G RAM + SSD
我自己生成了一个一亿行的文本, 没有一行重复, 对这个文本去重操作用了 2 分 20 秒, 内存占用 15.2GB, 小内存机器压力山大


这个完全可以用UNIX自带的awk搞定, 效率和内存占用都很犀利, 主要利用了awk数组是hashtable实现的特性。内存占用和去重以后的行数(而不是你的文本内容)成正比。我拿了150w行的文本处理时间是不到3

$ wc -l hello
1510230    hello

$ time awk '{ if (!fuckdup[$0]++) { print $0; } }' hello > hello_uniq

real    0m2.589s
user    0m2.263s
sys    0m0.324s

你这一亿行用不了多少内存, 也花不了多长时间

病毒体 2022-09-10 14:29:59

key:每一行的MD5
value:行号

可以借助redis,用hash结构,存进去的都是不重复的,然后根据行号再组织数据。

城歌 2022-09-10 14:29:59

海量数据去重可以参考我的这篇文章,使用Bitmap可以达到很好的效果
https://www.mrdwy.com/2018/08...

一向肩并 2022-09-10 14:29:59

根据id取模放在文件里然后去重,如果还是很大,就继续取模。

携君以终年 2022-09-10 14:29:59

1亿行 文本?
去重,是指 2行完全相同的数据?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文