我正在尝试解析一些看起来像这样的日志:
2016-05-16 04:15:16,842 INFO org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: <PERFLOG method=get_database from=org.apache.hadoop.hive.metastore.RetryingHMSHandler>
2016-05-16 04:15:16,842 INFO org.apache.hadoop.hive.metastore.HiveMetaStore: [pool-3-thread-194]: 154: get_database: newcluster
我只是搞乱如何分割这个文件以及我迄今为止所做的每一次尝试:
val split = hive.map(x=>x.split(":?(\\d{4})")).take(1)
删除前4位数而不是将它分成4位数?
split: Array[Array[String]] = Array(Array("", -05-13 00:37:50,808 INFO org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: </PERFLOG method=drop_table_with_environment_context start=, "", "", 5 end=, "", "", 8 duration=73 from=org.apache.hadoop.hive.metastore.RetryingHMSHandler threadId=154 retryCount=0 error=false>))
为什么删除该字段?我有一个更复杂的正则表达式我已经构建但只删除了所有内容......
答案 0 :(得分:0)
那么让参数拆分成"[- :,]"
?这给你带来了什么?
答案 1 :(得分:0)
以下是如何创建提取日期模式的正则表达式:
val pattern = """\d{4}-\d{2}-\d{2}""".r
val log = """2016-05-16 04:15:16,842 INFO org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: <PERFLOG method=get_database from=org.apache.h"""
pattern.findFirstIn(log)
res: Option[String] = Some(2016-05-16)
遵循此模式应该可以帮助您解析所需日志中的任何元素。
有关更多示例,请参阅here。