我尝试读取apache日志文件,并尝试在解析后将其放入数据帧中。
首先,我获取了日志的示例行,并使用正则表达式进行了一些练习来解析相同的内容。但是,当我尝试在代码中实现相同内容时,即使工作正常,它也会说“找不到匹配项”在演示中正确显示。请提供帮助。
https://regex101.com/r/yS3lY3/2
package common
object loganalysis extends App {
import common._
import org.apache.spark.sql.functions._
import java.util.regex.Pattern
import java.util.regex.Matcher
import scala.util.{Try, Success, Failure}
val spSession = SparkCommonUtils.spSession
val spContext = SparkCommonUtils.spContext
import spSession.implicits._
val sqlContext = new org.apache.spark.sql.SQLContext(spContext)
val regex = """(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})? (\S+) (\S+) (\[.+?\]) \"(.*?)\" (\d{3}) (\S+) \"(.*?)\" \"(.*?)\""""
val p = Pattern.compile(regex)
val logLine = s"""94.102.63.11 - - [21/Jul/2009:02:48:13 -0700] "GET / HTTP/1.1" 200 18209 "http://acme.com/foo.php" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)""""
val matcher = p.matcher(logLine)
println(matcher.group(1))
}
目前它说没有找到匹配项并且出错了。我想分别查看每个解析的字符串,最后我想归纳一下将其应用于整个文件,以便在没有匹配项时也可以处理异常找到了。