Я пытаюсь прочитать файл журнала 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))
}
ВПредставьте, что в нем не найдено совпадений и нет ошибок. Я хотел бы видеть каждую из проанализированных строк отдельно, и, наконец, я хотел бы обобщить, чтобы применить его ко всему файлу, чтобы он мог обрабатывать исключения также, когда совпадение не найдено.