单机读取大文件方法

有这样一个需求

1T 文件,行存储 

只有一台 128M,64M,256G

要求计算重复行

   做法:

参考hashmap的数据结构,有这种做法.仅仅是思路

每次读取一行数据,对它取哈希模上一个值,比如 i.hashCode()%2000,用2000个小文件分开存储1T文件的内容,这样保证了相同内容的行数据肯定落在同一个小文件中,再根据hashset的不可重复特点,找出重复行。这样只有两次1T文件的io读取。

还有一种需求是排序,

每次读取一行数据,如果在0-100形成一个文件,101-200形成一个小文件以此类推,这些小文件特点是外部有序,内部无序,每次读取小文件进行排序后放在一个大文件中,最终形成的大文件就是完全有顺序的。

还有一种做法是每次取500M文件或者说每次读200行,读取文件然后排序形成一个小文件,这些小文件的特点是内部有序,外部无序,可以用归并排序的方法读取小文件给所有小文件内容从小到大依次排序。这样只有两次1T文件的io读取

 

这两种做法其实都是采取了分治的思想,把内容分开形成多个小内容或者小文件再处理每个小文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值