1. 程式人生 > >Scala正則表示式提取文件中任意數字

Scala正則表示式提取文件中任意數字

      通常我們通過hdfs讀取文件資料時,都會伴隨許多空格等特殊的分割符號,此時需要提取出裡面的資料時可以用到正則表示式。其實如果只是一般的有規律性的分隔符號 如每個數字中間一個空格符號來進行分割的話,通過簡單的字串操作如split()即可,但是遇到了沒有規律性的時候就必須用到正則表示式了。直接用今天遇到的實際案例來進行說明Scala中的正則表示式的使用。

      在從hdfs中獲取到的資料中,資料全部是由數字和空格組成,每個數字之間的空格個數不確定,而且數字的型別有整數和小數:

  0.05100797  0.16086164  0
-0.74807425 0.08904024 0
 -0.77293371 0.26317168    0
如上是擷取的部分資料,通過正則表示式提取程式碼如下:
val patterns = "-?([0-9]+).([0-9]+)|-?([0-9]+)".r
前面部分是提取小數部分,可以提取正負任意小數,通過 | 可以將不同的提取規則連線起來,後面的是用於提取任意正負整數

資料是從hdfs獲取到的,要得到陣列操作如下:

val conf = new SparkConf().setAppName("XXX").setMaster("local")
val sc = new SparkContext(conf)
val datas = sc.textFile("XXXX")
val patterns = "-?([0-9]+).([0-9]+)|-?([0-9]+)".r<pre name="code" class="plain">al k = datas.map(patterns.findAllIn(_).toArray).collect()

如此得到k就是依據hdfs資料產生的一個Array[Array[Double]]型別的陣列,外層陣列內部元素是文件中的每一行得到的資料組成的陣列。

具體scala正則表示式詳細語法請參考:http://www.yiibai.com/scala/scala_regular_expressions.html