大数据文件处理

1.给定一个大小超过100G的文件,其中存在IP地址,找到其中出现次数最多的地址。

我们要对文件进行哈希切分:也就是利用哈希函数的思想,对文件中的IP做%1000计算 ,

将余数为0~999的结果(以键值对的方式)分别输出到0~999号文件中。(每个文件的平均大小大约是100M左右) 

找出每个文件中出现次数最多的IP,再次进行比较得到最大的IP值。

注:操作系统可以依次读取硬盘中的100G文件。

2.给定100亿个整数,找出只出现一次的整数。

我们用位图变形的方式来解决这个问题。用两个比特位来表示一个整数,第一个比特位表示该比特位是该整数否出现了多次,第二个比特位表示是该整数否出现了一次。

即:11表示出现了多次, 01表示出现了一次 ,00表示一次都未出现 。

整数的大小为2^32, 我们用两个比特位来表示,则一共需要2^33个比特位,也就是1G的内存。

我们建立1G内存的位图,将100亿个整数逐个插入到位图中,然后遍历位图

(建立count=0计数器,每次检查移动两位、并且count++,检查值是否为01,如果为01就输出count到指定文件中。 )

即得到所有只出现一次整数的集合。

3.有两个文件分别有100亿个字符串,只有1G内存,找到两个文件的交集。

我们要利用 哈希文件切分 和 布隆过滤器的思想。

对第一个文件中的每个字符串进行 哈希函数 (2个或者多个)计算,将两个计算结果相加后%100的余数为0~99的结果输出到0~99 个文件中。

对第二个文件也进行相应的操作。

对这100个小文件进行,去掉只出现一次的数据,然后数据去重就得到了交集(数据库有相关的函数调用),然后再将处理后的结果合并为一个文件。

4.给上千个文件,每个文件的大小为1k~100M,设计算法找出某个词在哪些文件中。

我们采用倒排索引的方式。

逐个遍历这1000个文件,对每个文件中出现的所有词语进行制表,即将单词进行哈希计算,建立哈希桶。(假设内存足够)

同一个文件中相同的单词只记录一次。 这样在遍历完成所有的文件后,我们就可以对一个新的单词进行哈希计算,然后再哈希桶中查找它在哪些文件中出现过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值