用于日志行的正则表达式可能在火花中彼此略有不同

时间:2016-08-26 09:30:07

标签: python regex apache-spark pyspark

我可以写一个正则表达式来匹配一个日志行。但是我的文件包含一些与其他日志行不同的日志行,因为只有一些额外的字段或少数几个,键值对被混淆。

EG。一个日志行:  case_id=1 event_id=35654423 date=30-12-2010 time=11.02 activity=registerrequest name=Pete costs=50 rerr="-"

另一个:case_id=1 event_id=35654424 date=31-12-2010 time=11.07 costs=400 rerr="-" activity=examinethoroughly name=Sue rloc="-"

我的日志模式= "^([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)" 这是我在spark中分组的代码:

match = re.search(LOG_PATTERN,line)
Case_ID = match.group(1)
Event_ID = match.group(2)
Date = match.group(3)
Time = match.group(4)
Activity = match.group(5)
Resource = match.group(6)
Costs = match.group(7)
Rerr = match.group(8)

此代码仅匹配第一个日志行。 我如何编写一个正则表达式,以便我可以将它们分组为spark而不忽略任何日志行?

1 个答案:

答案 0 :(得分:1)

我建议您使用简单的正则表达式来获取键和值:

rx = "(\\S+)=(\\S+)"

rx = "(\\w+)=(\\S+)"

查看regex demo

然后,使用re.findall

创建一个字典
d = dict([(x,y) for x,y in re.findall(rx,line)])

然后,您可以访问每个键值。