题目
应用“分治”思想,从某大型搜索引擎网站某天的访问日志数据文件(大数据集)中提取出访问该网站次数最多的IP。
(1)
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”。IP地址通常用“点分十进制"表示成a.b.c.d的形式,其中a,b,c,d均为0~255之间的十进制整数。如:点分十进制IP地址100.4.5.6,实际上是32位二进制数01100100.00000100.00000101.0000110。IP地址最多有种取值。
(2)
IP日志数据量非常大,不能完全加载到内存中处理。可以采用“分治”思想,把IP日志数据分别存储到1024个小文件中,则每个小文件最多包含个IP地址的数据。
(3)
同时统计每个小文件中出现次数最多的IP地址和出现次数。若小文件中IP地址数据格式如图所示,统计小文件中出现次数最多的IP地址的Python代码如下,在方框中补充合适代码,完善程序。
file = open("1.log') ips= [] for line in file: ip = line.split( )[0] #split( )分割后,返回的列表中第一个值就是IP地址 ips.append(ip) def showmax(list): #返回一个列表中出现次数最多的元素及其出现次数 print(showmax(ips))
(4)
汇总每个小文件中出现次数最多的IP地址和出现次数数据,可以得到至少个IP地址。对这些IP地址按出现次数排序或求最大值,最终得到总体上出现次数最多的IP。
答案: 【1】232
【1】4M
p=0 max= 0 for i in range(len(ist)): n= list. count(list[i]) if n> max: max=n p=i return list[p],max 或: p=0 max= 0 for i in range(len(list)): n= 1 for j in range(i+ 1, len(ist)): if list[j] == list[ij]: n+=1 if n> max: max=n p=i return list[p],max
【1】1024