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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值