2017-10-11 64 views
0

子这是我的代码,我已经使用来尝试解决问题:如何提取斯卡拉

Source.fromFile(file).getLines() 
    .foreach{ line => 
    line.split(" - - | \"POST | HTTP/1.1\" ") 
     .foreach(word => println(word)) 
    } 

这是我的三个串

192.168.9.230 - - [24/Apr/2017:08:58:06 +0800] "POST /dvr-gateway/api/genl/user/login HTTP/1.1" 200 211 
192.168.32.145 - - [24/Apr/2017:08:58:07 +0800] "POST /dvr-gateway/api/genl/org/find HTTP/1.1" 200 126 
192.168.2.54 - - [24/Apr/2017:08:58:52 +0800] "POST /dvr-gateway/api/genl/user/login HTTP/1.1" 200 211 

我只想IP地址和文件的地址。 例子,我希望它打印到:

192.168.9.230 
/dvr-gateway/api/genl/user/login 
+0

我对代码做了一些更改,只显示了问题的实质。 – Shaido

回答

0

最简单的方法来解决,这将是从split结果赋值给一个变量,只保留了第一和第三个元素。

Source.fromFile(file).getLines().foreach{ line => 
    val splits = line.split(" - - | \"POST | HTTP/1.1\" ") 
    List(splits(0), splits(2)).foreach(word => println(word)) 
} 
+0

非常感谢,这是工作。现在我有一个新的问题,我的代码改变了火花流,使用这条线“textFile.flatMap(_。split(”“))”。我该怎么办? – cyfckl2008

+0

@ cyfckl2008如果你有一个新的问题,我会建议在网站上打开一个新的问题。我不完全确定你想要完成什么。 – Shaido