2017-10-11 129 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