有一个很大(4T)的文件,文件中存储的是ip 每行存储一个 要求求出出现次数最多的那个ip

有一个很大(4T)的文件,文件中存储的是ip 每行存储一个 要求求出出现次数最多的那个ip
分而治之的思想:
一个机器计算性能有限 这个时候可以使用多台机器共同计算 每台机器承担一部分计算量
最终实现:
1.先将这个足够大的文件进行切分 切分成了多个小文件
2.将多个小文件分发给多个机器进行统计每个ip出现的次数 每个求出出现次数最多的ip
3.合并求出最终的最大值
package day2;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.SortedSet;
import java.util.TreeSet;

public class CalIP {
public static void main(String[] args) throws IOException {
Map<String,Integer> map=new HashMap<>();
SortedSet set =new TreeSet<>();
FileReader f=new FileReader(“D:/java/bigdate/day3/ip.txt”);
BufferedReader bf=new BufferedReader(f);
String line=null;
int value=1;
while((line=bf.readLine())!=null) {
if (map.containsKey(line)) {// �ж��Ƿ����
Iterator<Entry<String, Integer>> i = map.entrySet().iterator();
while (i.hasNext()) {
Entry<String, Integer> e = i.next();
if (e.getKey().equals(line)) {
value = e.getValue();
value++;
map.put(line, value);
break;
}
}
} else {
map.put(line, value);
}
set.add(value);
value = 1;
}
//���ip����
int count=set.last();//Ĭ����������
Iterator<Entry<String, Integer>> j = map.entrySet().iterator();
String key="";
while(j.hasNext()) {
Entry<String, Integer> ff = j.next();
if(count==ff.getValue()){
key=ff.getKey();
System.out.println(“IP:”+key+":���ִ���"+count);
}
}
bf.close();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值