简体   繁体   English

使用 Apache Spark Scala 的正则表达式 RDD

[英]Regex RDD using Apache Spark Scala

I have the following RDD:我有以下RDD:

x: Array[String] =
Array("Et: NT=grouptoClassify,hadoop-exec,sparkConnection,Ready
group: NT=app_1,hadoop-exec,sparkConnection,Ready
group: NT=app_exmpl_2,DB-exec,MDBConnection,NR
group: NT=apprexec,hadoop-exec,sparkConnection,Ready
group: NT=nt_prblm_app,hadoop-exec,sparkConnection,NR

I just want to get the first part of every part of this RDD as you can see in the next example:我只想获取此 RDD 的每个部分的第一部分,如您在下一个示例中所见:

Et: NT=grouptoClassify
group: NT=app_1
group: NT=app_exmpl_2
group: NT=apprexec
group: NT=nt_prblm_app

To do it I am trying it in this way.为此,我正在尝试这种方式。

//Here I get the RDD:
val x = spark.sparkContext.parallelize(List(value)).collect()
//Try to use regex on it, this regex is to get until the first comma
val regex1 = """(^(.+?),)"""
val rdd_1 = x.map(g => g.matches(regex1))

This is what I am trying but is not working for me because I just get an Array of Boolean.这是我正在尝试的,但对我不起作用,因为我只得到了一个 Boolean 数组。 What am I doing wrong?我究竟做错了什么?

I am new with Apache Spark Scala.我是 Apache Spark Scala 的新手。 If you need something more just tell me it.如果您需要更多东西,请告诉我。 Thanks in advance!提前致谢!

Try with this regex:试试这个正则表达式:

^\s*([^,]+)(_\w+)?

Demo演示

try this.尝试这个。

val x: Array[String] =
    Array(
      "Et: NT=grouptoClassify,hadoop-exec,sparkConnection,Ready",
      "group: NT=app_1,hadoop-exec,sparkConnection,Ready",
      "group: NT=app_exmpl_2,DB-exec,MDBConnection,NR",
      "group: NT=apprexec,hadoop-exec,sparkConnection,Ready",
      "group: NT=nt_prblm_app,hadoop-exec,sparkConnection,NR")

  val rdd = sc.parallelize(x)

  val result = rdd.map(lines => {
    lines.split(",")(0)
  })

  
 result.collect().foreach(println)

output: output:

Et: NT=grouptoClassify
group: NT=app_1
group: NT=app_exmpl_2
group: NT=apprexec
group: NT=nt_prblm_app

With RDD:使用 RDD:

 val el = Seq("Et: NT=grouptoClassify,hadoop-exec,sparkConnection,Ready",
   "group: NT=app_1,hadoop-exec,sparkConnection,Ready",
   "group: NT=app_exmpl_2,DB-exec,MDBConnection,NR",
   "group: NT=apprexec,hadoop-exec,sparkConnection,Ready",
   "group: NT=nt_prblm_app,hadoop-exec,sparkConnection,NR")

val rdd = spark.sparkContext.parallelize((el).map((Row(_))))
val pattern = "([a-zA-Z0-9=:_ ]+),(.*)".r

rdd.map { 
  case Row(str) => str match {
    case pattern(gr1, _) => gr1 
  }
}.foreach(println(_))

It gives:它给:

Et: NT=grouptoClassify
group: NT=app_1
group: NT=app_exmpl_2
group: NT=apprexec
group: NT=nt_prblm_app

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM