Python实现的大数据分析操作系统日志功能示例
本文实例讲述了Python实现的大数据分析操作系统日志功能。分享给大家供大家参考,具体如下:
一代码
1、大文件切分
importos
importos.path
importtime
defFileSplit(sourceFile,targetFolder):
ifnotos.path.isfile(sourceFile):
print(sourceFile,'doesnotexist.')
return
ifnotos.path.isdir(targetFolder):
os.mkdir(targetFolder)
tempData=[]
number=1000
fileNum=1
linesRead=0
withopen(sourceFile,'r')assrcFile:
dataLine=srcFile.readline().strip()
whiledataLine:
foriinrange(number):
tempData.append(dataLine)
dataLine=srcFile.readline()
ifnotdataLine:
break
desFile=os.path.join(targetFolder,sourceFile[0:-4]+str(fileNum)+'.txt')
withopen(desFile,'a+')asf:
f.writelines(tempData)
tempData=[]
fileNum=fileNum+1
if__name__=='__main__':
#sourceFile=input('Inputthesourcefiletosplit:')
#targetFolder=input('Inputthetargetfolderyouwanttoplacethesplitfiles:')
sourceFile='test.txt'
targetFolder='test'
FileSplit(sourceFile,targetFolder)
2、Mapper代码
importos
importre
importthreading
importtime
defMap(sourceFile):
ifnotos.path.exists(sourceFile):
print(sourceFile,'doesnotexist.')
return
pattern=re.compile(r'[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}')
result={}
withopen(sourceFile,'r')assrcFile:
fordataLineinsrcFile:
r=pattern.findall(dataLine)
ifr:
t=result.get(r[0],0)
t+=1
result[r[0]]=t
desFile=sourceFile[0:-4]+'_map.txt'
withopen(desFile,'a+')asfp:
fork,vinresult.items():
fp.write(k+':'+str(v)+'\n')
if__name__=='__main__':
desFolder='test'
files=os.listdir(desFolder)
#如果不使用多线程,可以直接这样写
'''forfinfiles:
Map(desFolder+'\\'+f)'''
#使用多线程
defMain(i):
Map(desFolder+'\\'+files[i])
fileNumber=len(files)
foriinrange(fileNumber):
t=threading.Thread(target=Main,args=(i,))
t.start()
3.Reducer代码
importos
defReduce(sourceFolder,targetFile):
ifnotos.path.isdir(sourceFolder):
print(sourceFolder,'doesnotexist.')
return
result={}
#Dealonlywiththemappedfiles
allFiles=[sourceFolder+'\\'+fforfinos.listdir(sourceFolder)iff.endswith('_map.txt')]
forfinallFiles:
withopen(f,'r')asfp:
forlineinfp:
line=line.strip()
ifnotline:
continue
position=line.index(':')
key=line[0:position]
value=int(line[position+1:])
result[key]=result.get(key,0)+value
withopen(targetFile,'w')asfp:
fork,vinresult.items():
fp.write(k+':'+str(v)+'\n')
if__name__=='__main__':
Reduce('test','test\\result.txt')
二运行结果
依次运行上面3个程序,得到最终结果:
07/10/2013:4634
07/16/2013:51
08/15/2013:3958
07/11/2013:1
10/09/2013:733
12/11/2013:564
02/12/2014:4102
05/14/2014:737
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python日志操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。