我试图在azurehdinsight中编写一个spark应用程序(在scala中),使用正则表达式从日志行中提取信息。正则表达式如下:
val patt1="""(?:(\w+) (\w+) (\d+) (\d+):(\d+):(\S+) (\w+) \[([^]]+)\] \((.*)\) - \[(\w+)\](?:\[(\w+)\])?\[(\w+)\]\[(\w+)\]\[\w+\]\[([^]]+)\](?:.*\[(.+)\]}))""".r
这种模式是正确的,因为如果我使用jupyter笔记本,或者在eclipse中使用local,一切都正常,我能够从日志中提取数据。
问题是当我尝试使用齐柏林飞艇笔记本而不是jupyter时,当我把patt1写成一个字符串(没有.r)时,给了我一个奇怪的错误:
500 Internal Server Error
在构建正则表达式之前,我还尝试导入scala.util.matching.regex,但错误是相同的。我想在三重引号或格式中有一些东西是齐柏林飞艇不允许的,但我不明白是什么。有人能帮我吗?我想使用zeppelin而不是jupyter,因为我认为它可以更好地可视化sparksql查询。
但如果我试着写一个简单的模式 patt= """.*""".r
没有错误。
edit:i tried 在zeppelin中编写正则表达式已经有好几次了,问题似乎是如何将组捕获为(\d)(\w)等。zeppelin scala explorate(livy)不接受它们。但是同样的正则表达式在jupyter中非常有效。我刚到斯卡拉,可能错过了一些很容易的事情。请帮帮我
1条答案
按热度按时间fnatzsnv1#
解决方法:我刚刚更换了所有
\
与\\
而且效果很好。似乎livy interpeter不接受单身\
在scala正则表达式中,但接受\\
然后转换为\
.