10+G的超大文本如何整行去重

橘子皮... 2019-07-18 03:45:15
单个txt,10G左右,如果整行去重
比如
aaaa
1111
aaaa
去重后
aaaa
1111
用什么思路比较好,我用LOAD DATA直接试图把txt导入mysql,结果执行一半跳出错误,这么大文档不知道怎么弄了
循环处理用List的话,貌似2000w就内存溢出了
...全文
658 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengzizhi 2019-12-15
  • 打赏
  • 举报
回复
TXT文本去重 TXT文本合并 TXT文件求并集
https://blog.csdn.net/zhengzizhi/article/details/72615021
测试数据大小:20亿行130GB的数据只需60分钟 平均去重速度:2000000000(行) ÷ 3600(秒) =‬ 555555(行/秒)≈55万行/秒
  • 打赏
  • 举报
回复
参考 https://blog.csdn.net/Asa_Jim/article/details/86663414
橘子皮... 2019-07-18
  • 打赏
  • 举报
回复
好的,我来研究研究
wanghui0380 2019-07-18
  • 打赏
  • 举报
回复
基本上这就是传统的跳跃表+Hash表的配合 一致性hash------类似计算跳跃表-------先跳到一个大体的位置 然后在查hash表数据定位-------------hash定位,是直接定位模式,无需挨个查找。 当然这里我放了hash文件,这个主要是因为既然是内存扛不住,自然的目标就是把内存IO放到磁盘IO上 总体上就是,数据---------散列一致性hash--------根据一致性hash直接跳跃到对应的hash文件------在根据Hash值转换成文件对应的寻址(这个需要写个函数,比如hash值对应的 寻址地址是xxxxx,根据文件个数,我们可以简单做个求模,在根据模值*条数据预留的长度,直接定位到文件地址)---------去该文件地址直接读取固定长度数据,判定一下有没写东西进去
wanghui0380 2019-07-18
  • 打赏
  • 举报
回复
10G很明显不可一次读到内存。

所以很明显是一行一行读。(可以并行分块读,不过这是后续的),我们先来解决内存的问题把

很明显我们不太可能把数据放到内存,我们只会用hashtable去保留判定特征。同时采用hash文件来保存临时信息。(当然这个会有多个文件,那么我们可以采用一致性hash,把东西散到多个hash文件里,加上hash文件可以直接定位判定,这样内存里实际没多少东西,一致性hash可以知道我去那个hash文件查找,而hash文件查找又能瞬间知道有没有保存过数据)
  • 打赏
  • 举报
回复
https://www.cnblogs.com/Damos/p/bigText.html 这样读取,然后依赖数据库的唯一性约束去重吧

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧