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

查看 474|回复 39
drymonfidelia
OP
  
去重后大概会有多少行知道吗
rrfeng   
遍历整个文件,每行都 hash 一下,把 hash 存到一个高性能 KV 里,不重复就输出当前行,重复就跳过当前行。
lifanxi   
@rrfeng 不知道
drymonfidelia
OP
  
如果不是要求严格不能丢数据的话, 可以用布隆过滤器去重, 误判率有公式可以算的, 有几十 GB 级别内存的话, 误判率应该比较低的
cndenis   
开启 zram ,256g 可以当作 512g 没问题。
sha1sum 一个占用 20 字节,200 亿差不多占用 372g ,没问题。
极低概率去掉非重复行,几乎可以忽略。
phrack   
那就 bloomfilter 先过一遍看看情况。
要硬算的话,就分块排序,排完序就好处理了。排序前记录下序号,最后还原一下顺序。
rrfeng   
redis 的布隆过滤器可以考虑下
hbcolorful   
@drymonfidelia 看错了,还以为是 6GB 的 csv 文件在线处理呢,那确实不适合 duckdb 。
还是上 spark 吧,硬盘配大点就行。
203 亿行 csv 有那么大吗,我们每天备份全量的 17 亿行信息,保留几十天,用 orc 存储,也就几百 G 。
xxfye   
感觉可以试试 clickhouse 。
kneo   
使用 apache spark ,用 python 的 PySpark 库试试,具体可以问 gpt-4
您需要登录后才可以回帖 登录 | 立即注册

返回顶部