如何在Spark Scala中正确解析Apache日志文件?

时间:2019-03-30 09:44:45

标签: regex scala apache-spark apache-spark-sql

我尝试读取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))

  }

目前它说没有找到匹配项并且出错了。我想分别查看每个解析的字符串,最后我想归纳一下将其应用于整个文件,以便在没有匹配项时也可以处理异常找到了。

0 个答案:

没有答案