rsyslog+loganalyzer日志收集分析处理
2013-11-25 17:37
513 查看
MAP/REDUCE
map():
map()函数接收两个参数,一个是函数,一个是Iterable。map将传入的函数一次作用到序列的每个元素。并把结果作为Iterator返回。
举例,有一个计算机平方的函数。f(x) =x * x
>>>def f(x):
return x *x
>>>r =map(f,[1,2,3,4,5])
>>>list(r)
[1,4,9,16,25]
map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,是惰性序列,所以通过list()将整个序列都计算出来,并返回一个list。
上述结果同样可以使用循环做到:
>>>L =[]
>>>for i in [1,2,3,4,5]:
L.append(f(i))
print(L)
事实上,map()作为高阶函数它把运算规则抽象化了,因此我们不仅可以计算f(x) = x*x ,而且还可以计算人以复杂的函数,比如把这个list所有数字转化为字符串:
>>>list(map(str,[1,2,3,4,5,6,7,8]))
['1','2','3','4','5','6','7','8']
reduce:
reduce是把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,效果:
reduce(f,[x1,x2,x3,x4]) =f(f(f(x1,x2),x3),x4)
如果将序列[1,2,3,4,5]变成12345,则使用reduce实现将是非常简单:
>>>from functools import reduce
>>>def fn(x,y):
return x*10 +y
>>>reduce(fn,[1,2,3,4,5])
12345
这个例子本身没有多大用处,但是如果考虑到字符串也是一个序列,对上面的例子稍加改动。配合map(),我们就可以写出将str转换为int的函数:
>>>from functools import reduce
>>>def fn(x,y):
return x*10 +y
>>>def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
>>>reduce(fn,map(char2num,'12345'))
12345
整理成一个str2int的函数就是:
>>>from functools import reduce
def str2int():
def fn(x,y):
return x*10 +y
def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
return reduce(fn,map(char2num,s))
还可以使用lambda进一步简化:
>>>from functools import reduce
>>>def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
>>>def str2int():
return reduce(lambda x,y:x*10+y,map(char2num,s))
也就是说Python没有提供int()函数,你完全可以自己写一个把字符串转换为整数的函数。而且只需要几行代码。
map():
map()函数接收两个参数,一个是函数,一个是Iterable。map将传入的函数一次作用到序列的每个元素。并把结果作为Iterator返回。
举例,有一个计算机平方的函数。f(x) =x * x
>>>def f(x):
return x *x
>>>r =map(f,[1,2,3,4,5])
>>>list(r)
[1,4,9,16,25]
map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,是惰性序列,所以通过list()将整个序列都计算出来,并返回一个list。
上述结果同样可以使用循环做到:
>>>L =[]
>>>for i in [1,2,3,4,5]:
L.append(f(i))
print(L)
事实上,map()作为高阶函数它把运算规则抽象化了,因此我们不仅可以计算f(x) = x*x ,而且还可以计算人以复杂的函数,比如把这个list所有数字转化为字符串:
>>>list(map(str,[1,2,3,4,5,6,7,8]))
['1','2','3','4','5','6','7','8']
reduce:
reduce是把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,效果:
reduce(f,[x1,x2,x3,x4]) =f(f(f(x1,x2),x3),x4)
如果将序列[1,2,3,4,5]变成12345,则使用reduce实现将是非常简单:
>>>from functools import reduce
>>>def fn(x,y):
return x*10 +y
>>>reduce(fn,[1,2,3,4,5])
12345
这个例子本身没有多大用处,但是如果考虑到字符串也是一个序列,对上面的例子稍加改动。配合map(),我们就可以写出将str转换为int的函数:
>>>from functools import reduce
>>>def fn(x,y):
return x*10 +y
>>>def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
>>>reduce(fn,map(char2num,'12345'))
12345
整理成一个str2int的函数就是:
>>>from functools import reduce
def str2int():
def fn(x,y):
return x*10 +y
def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
return reduce(fn,map(char2num,s))
还可以使用lambda进一步简化:
>>>from functools import reduce
>>>def char2num(s):
return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
>>>def str2int():
return reduce(lambda x,y:x*10+y,map(char2num,s))
也就是说Python没有提供int()函数,你完全可以自己写一个把字符串转换为整数的函数。而且只需要几行代码。
相关文章推荐
- CentOS6.8下使用rsyslog+loganalyzer+ldap部署日志服务器来实现日志收集
- 【服务器集群日志监控管理】RHEL.x搭建rsyslog日志服务器和loganalyzer日志分析工具
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具
- 日志分析之LogAnalyzer+Rsyslog日志分析系统全 推荐
- Linux 之rsyslog+LogAnalyzer 日志收集系统
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具 推荐
- centos6.4搭建rsyslog日志服务器和loganalyzer 日志分析工具--续
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具
- Linux 之rsyslog+LogAnalyzer 日志收集系统
- Rsyslog介绍以及结合loganalyzer进行日志分析 推荐
- rsyslog+loganalyzer简单日志分析
- it-linux--日志分析-- rsyslog+loganalyzer尝试
- rsyslog+MySQL+loganalyzer日志集中分析管理
- 总结之:CentOS 6.5 rsyslog+MySQL+loganalyzer日志集中分析管理
- CentOS 6.5下的lamp环境rsyslog+MySQL+loganalyzer实现日志集中分析管理
- RHEL 6.x 搭建Rsyslog日志服务器和loganalyzer日志分析工具
- centos6.4搭建rsyslog日志服务器和loganalyzer 日志分析工具
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具
- 配置使用rsyslog+loganalyzer收集防火墙及交换机日志
- CentOS 6.5下的lamp环境rsyslog+MySQL+loganalyzer实现日志集中分析管理