Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在scala中解析自定义日志文件以使用模式提取一些键值对_Java_Regex_Scala_Apache Spark - Fatal编程技术网

Java 如何在scala中解析自定义日志文件以使用模式提取一些键值对

Java 如何在scala中解析自定义日志文件以使用模式提取一些键值对,java,regex,scala,apache-spark,Java,Regex,Scala,Apache Spark,我正在构建一个spark流媒体应用程序,它接收来自服务器的日志。日志行看起来像这样 2015-06-18T13:53:46.606-0400 CustomLog v4 INFO: source="ABCD" type="type1" <xml some xml here attr1='value1' attr2='value2' > </xml> <some more xml></> time ="232" 2015-06-18T13:53:4

我正在构建一个spark流媒体应用程序,它接收来自服务器的日志。日志行看起来像这样

2015-06-18T13:53:46.606-0400 CustomLog v4 INFO: source="ABCD" type="type1"  <xml some xml here attr1='value1' attr2='value2' > </xml> <some more xml></> time ="232"
2015-06-18T13:53:46.606-0400自定义日志v4信息:source=“ABCD”type=“type1”time=“232”
我正试图遵循databricks在这里编写的示例应用程序

我被ApacheAccessLog.scala中的模式卡住了。我的日志是一个自定义日志,在一个典型的日志行中有这个key=“value”对


我不太明白这个模式意味着什么,以及如何改变它以适应我的应用程序。我需要根据日志中的源键和类型键对时间进行一些聚合

case类需要很多东西,比如日志中显然没有的IP地址,因此您需要修改case类定义,以便只包含要添加的字段

为了在这里进行说明,让我们将case类设置为:

case class ApacheAccessLog(source: String, type: String, time: Long)
然后你可以用找到的正则表达式替换正则表达式,你可以在这里玩正则表达式,我准备了一些东西让你开始,产生一个正则表达式,类似这样:

source="(.*?)" type="(.*?)" .* time ="(.*?)"
将三组字符捕获到
m
中。然后,您可以使用以下组修复实例化:

ApacheAccessLog(m.group(1), m.group(2), m.group(3).toLong)

HTH.

谢谢@bjfletcher我的示例有点过时了,时间在xml之后。。正在尝试做一个quck正则表达式教程。。。我已经很久没有写过任何常规的东西了expressions@Sai不客气,我刚刚在回答中更新了正则表达式,第二次跳过了XML。