我正在尝试在Azure HDInsight中编写一个spark应用程序(在scala中),以使用正则表达式从日志行中提取信息。 正则表达式是这样的:
val patt1="""(?:(\w+) (\w+) (\d+) (\d+):(\d+):(\S+) (\w+) \[([^]]+)\] \((.*)\) - \[(\w+)\](?:\[(\w+)\])?\[(\w+)\]\[(\w+)\]\[\w+\]\[([^]]+)\](?:.*\[(.+)\]}))""".r
模式是正确的,因为如果我使用Jupyter笔记本,或者在eclipse中本地工作,一切正常,我可以从日志中提取数据。
当我将patt1写成字符串(没有.r)时,我尝试使用Zeppelin笔记本而不是Jupyter时,问题就出现了这个奇怪的错误:
500 Internal Server Error
我还尝试在构建正则表达式之前导入scala.util.matching.Regex,但错误是一样的。我认为三重引语或齐柏林飞艇不允许的格式中有一些东西,但我无法理解。有人可以帮帮我吗?我想使用Zeppelin代替Jupyter,因为我认为可以更好地可视化sparksql查询。
但是,如果我尝试将一个简单的模式写为patt= """abc.*""".r
,则没有错误。
编辑:我曾多次尝试在Zeppelin中编写正则表达式,似乎问题在于捕获组为(\ d)(\ w)等.Zeppelin scala解释(Livy)不接受它们。 但同样的正则表达式在jupyter中完美运行。 我是斯卡拉的新人,也许我很想念一些东西。请帮帮我
答案 0 :(得分:0)
已解决:我刚用\
替换了所有\\
,但效果很好。
似乎Livy interpeter在scala regex中不接受单\
但接受\\
然后转换为\
。