在Spark RDD中使用regex从字符串中提取时间戳

时间:2018-03-06 15:57:47

标签: regex hadoop apache-spark rdd

我有一个日志:

time

我想在这里提取val lines = sc.textFile("/logs/log7.txt") val individualLines=lines.flatMap(_.split("\n")) //Splitting file contentinto individual lines val dates=individualLines.filter(value=>value.startsWith("[0-9]")) 信息(20:33:05)。

我尝试过以下操作:

MapPartitionsRDD[3] at filter at DateExtract.scala:30

我的输出为

{{1}}

如何在此定义正则表达式?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

如果您有一个包含新行数据的日志文件,则不必split它,您只需阅读每一行String数据

然后检查它是否以Character.isDigit此数字的数字开头,如下所示

  val lines = sc.textFile("/logs/log7.txt")
  val dates=lines.filter(value=>Character.isDigit(value.charAt(0)))
            .map(_.split(" ")(0))
  dates.foreach(println)

如果您想严格匹配时间戳与正则表达式和过滤器不匹配,那么您可以使用

val dates=lines.filter(value=>Character.isDigit(value.charAt(0)))
    .map(_.split(" ")(0))
    .filter(_.matches("""\d{2}:\d{2}:\d{2}"""))

输出:

20:33:05

希望这有帮助!