急求:两个千万级数据比对过滤

wifewifewife 2013-03-17 02:49:31
现有有两个txt文件,比如a.txt,b.txt,这两个文件里面都是有一千万条数据.现在对这两个文件当中重复的文件过滤掉,把b.txt存在,而a.txt中不存在的数据写到c.txt当中.我试过用list这种普通的过滤会抛内存溢出.不知道还有没其它的好方面.求助各位高手.
...全文
483 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 2013-03-19
  • 打赏
  • 举报
回复
分批比对吧。 另外感觉对比的算法上应该提高。 要是双list循环比对绝对崩。
blacksun1002 2013-03-19
  • 打赏
  • 举报
回复
这个比较难
wqkasdf1224 2013-03-19
  • 打赏
  • 举报
回复
function B: b切成n份 for(i=0; i<n; i++) { 将切片传入A中进行验证 } a切分成m份 function A: for(i=0; i<m; i++) { 将B的某个切片 放进来比对A的切片 每次比对 , 清理内存 }
啪滋啪滋书生 2013-03-19
  • 打赏
  • 举报
回复
一枚菜鸟,领走。
不安的三十岁 2013-03-19
  • 打赏
  • 举报
回复
友情帮顶 学习学习
小蝸牛 2013-03-19
  • 打赏
  • 举报
回复
读取流的时候可以分批读取,比如说每次读取十万行进行比较。
dracularking 2013-03-19
  • 打赏
  • 举报
回复
引用 13 楼 AFer198215 的回复:
引用 11 楼 dracularking 的回复:好,但hashcode相等不代表原记录一定相等怎么办?
真的会出现这种情况?

这就是所谓的hash collision嘛
想喝咖啡的貓 2013-03-19
  • 打赏
  • 举报
回复
引用 11 楼 dracularking 的回复:
好,但hashcode相等不代表原记录一定相等怎么办?
真的会出现这种情况?
想喝咖啡的貓 2013-03-19
  • 打赏
  • 举报
回复
引用 11 楼 dracularking 的回复:
好,但hashcode相等不代表原记录一定相等怎么办?
那么上CRC或MD5吧
dracularking 2013-03-19
  • 打赏
  • 举报
回复
引用 5 楼 AFer198215 的回复:
我有个思路,仅供参考: 对比多条复杂的记录很慢,但是对比一堆hashcode要快的多,所以,创建两个临时文件 a.txt.index和b.txt.index,这两个临时文件中只有三列信息:某条记录在x.txt的文件位置、记录长度和此条记录hashcode。 一次从a.txt.index取十万条记录 放到内存用不了多少M。再于b.txt.index分批比较,由于只需要比……
好,但hashcode相等不代表原记录一定相等怎么办?
Ji秋风 2013-03-18
  • 打赏
  • 举报
回复
用nio,切勿一次性读入内存。
dw_java08 2013-03-18
  • 打赏
  • 举报
回复
引用 7 楼 AFer198215 的回复:
引用 5 楼 AFer198215 的回复:我有个思路,仅供参考: 对比多条复杂的记录很慢,但是对比一堆hashcode要快的多,所以,创建两个临时文件 a.txt.index和b.txt.index,这两个临时文件中只有三列信息:某条记录在x.txt的文件位置、记录长度和此条记录hashcode。 一次从a.txt.index取十万条记录 放到内存用不了多少M。再于……
想喝咖啡的貓 2013-03-18
  • 打赏
  • 举报
回复
引用 5 楼 AFer198215 的回复:
我有个思路,仅供参考: 对比多条复杂的记录很慢,但是对比一堆hashcode要快的多,所以,创建两个临时文件 a.txt.index和b.txt.index,这两个临时文件中只有三列信息:某条记录在x.txt的文件位置、记录长度和此条记录hashcode。 一次从a.txt.index取十万条记录 放到内存用不了多少M。再于b.txt.index分批比较,由于只需要比……
我刚算了一下,1000万条索引信息占用内存约为 1000*10000*(8+8+4)/1024/1024不到200M,应该可以都读到内存。
飘逸的腿毛 2013-03-18
  • 打赏
  • 举报
回复
我觉得用计数器统计 每隔几万条数据 手动清空下缓存不知道可行不
想喝咖啡的貓 2013-03-18
  • 打赏
  • 举报
回复
我有个思路,仅供参考: 对比多条复杂的记录很慢,但是对比一堆hashcode要快的多,所以,创建两个临时文件 a.txt.index和b.txt.index,这两个临时文件中只有三列信息:某条记录在x.txt的文件位置、记录长度和此条记录hashcode。 一次从a.txt.index取十万条记录 放到内存用不了多少M。再于b.txt.index分批比较,由于只需要比较hashcode,比较速度应该是比较快的。
大海之粟 2013-03-18
  • 打赏
  • 举报
回复
最好的方式用hadoop
yujinjin9 2013-03-18
  • 打赏
  • 举报
回复
因为a.txt,b.txt两个文件里面的数据达到一千万条数据.我很难想象这能用内存一次读出来进行比较。所以只能逐条读入进行对比,但如果你的数据有一定的规律,比如按照一定的排序方式还能操作,如果不是一定的顺序,那我个人建议你还是借用数据库工具通过SQL来实现吧。
wifewifewife 2013-03-17
  • 打赏
  • 举报
回复
顶上去.
长笛党希望 2013-03-17
  • 打赏
  • 举报
回复
这倒是没遇到过,友情帮顶

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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