要对单个 6.20TB 的超大 csv 文件保持顺序的情况下进行去除重复行,有什么好思路?显然不可能加载进内存

查看 476|回复 39
yinmin   
1. hash
2. 加序号
3. 按照 hash 分区
4. 逐个处理分区
5. 分区内排序
6. 分区外归并排序
只有单机的话,可以考虑用 duckdb ,多机就用 spark 吧。
xxfye   
分治:
1 、用空间换时间(计算)
2 、用时间(计算)换空间
针对( 1 )有 spark 集群很快的,如果预算有限那么方法( 2 ):
1 、把数据分成 N 块,并针对 N 块内进行去重
2 、从 n 块中取一块,和剩下的 n-1 块去重,取这一块建立 hash or map 都可以,n-1 按照顺序读取
3 、从剩下的 n-1 块中又进行步骤( 2 ), 直到 n=0
4 、经过上述思路处理的 csv 就包含重复
yangxin0   
直接存入 kvrocks (硬盘版 redis)
caola   
单文件这么大,文件系统压力也不小吧。多数文件系统单文件也不支持这么大吧
dacapoday   
sed 有往下查找一样内容行并删除的工具都可以 其它的都要内存或硬盘空间 vim 就差在它开启文件要暂存 不然也可以
james122333   
磁盘够用的话,先外部排序,然后直接读取,忽略与上一条相同的数据就行了吧,随机读取文件指定位置,也不用加载进内存
YTMartian   
按顺序处理,依据一个合适长度的前缀做分区,逐行文本进行处理,写入到对应分区下面。
检索特定行文本,是否在对应分区内存在,不存在则写入,存在就返回已存在。
dode   
emeditor
chen7897499   
https://www.emeditor.com/text-editor-features/large-file-support/files-up-to-248gb/
chen7897499   
上面有人提到的 Bloom Filter 应该是相对最优的解法了,实现简单,占用内存低,速度也快。唯一的问题就是要选择合适的长度,将错误率降低,这需要一定的算法知识,不过现在可以问 AI 了,让 AI 给出公式
您需要登录后才可以回帖 登录 | 立即注册

返回顶部