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


猜你喜欢

转载自blog.csdn.net/klordy_123/article/details/49470199
今日推荐