Как правильно разобрать лог-файлы apache в spark scala? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь прочитать файл журнала apache и пытаюсь поместить его в dataframe после синтаксического анализа.

Для начала я взял пример строки журнала и выполнил некоторое упражнение, используя regex для его анализа.Однако, когда я пытаюсь реализовать то же самое в коде, он говорит «не найдено совпадений», хотя это правильно работает в DEMO. Пожалуйста, помогите.

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))

  }

ВПредставьте, что в нем не найдено совпадений и нет ошибок. Я хотел бы видеть каждую из проанализированных строк отдельно, и, наконец, я хотел бы обобщить, чтобы применить его ко всему файлу, чтобы он мог обрабатывать исключения также, когда совпадение не найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...