簡體   English   中英

模式匹配-Spark Scala RDD

[英]Pattern matching - spark scala RDD

我是R背景的Spark和Scala的新手,在對RDD進行了一些轉換之后,我得到了RDD類型

Description: RDD[(String, Int)]

現在,我想在字符串RDD上應用正則表達式,並從字符串中提取子字符串,然后僅在新列中添加子字符串。

輸入數據 :

BMW 1er Model,278
MINI Cooper Model,248

我正在尋找的輸出:

   Input                  |  Brand   | Series      
BMW 1er Model,278,          BMW ,        1er        
MINI Cooper Model ,248      MINI ,      Cooper

其中Brand和Series是來自字符串RDD的新計算的子字符串

到目前為止我所做的。

我可以使用正則表達式為String實現此功能,但是我可以將其應用於所有行。

 val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r //to look for BMW or MINI

那我可以用

brandRegEx.findFirstIn("hello this mini is bmW testing")

但是,如何將它用於RDD的所有行並應用不同的正則表達式來實現上述輸出。

我閱讀了有關此代碼段的信息,但不確定如何將其完全放在一起。

val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r

def getBrand(Col4: String) : String = Col4 match {
    case brandRegEx(str)  =>  
    case _ => ""
    return 'substring
}

任何幫助,將不勝感激 !

謝謝

要將正則表達式應用於RDD中的每個項目,您應該使用RDD map函數,該函數使用某些函數(在本例中為Partial Function來提取RDD中的每一行,以提取組成元組的兩部分)每一行):

import org.apache.spark.{SparkContext, SparkConf}

object Example extends App {

  val sc = new SparkContext(new SparkConf().setMaster("local").setAppName("Example"))

  val data = Seq(
    ("BMW 1er Model",278),
    ("MINI Cooper Model",248))

  val dataRDD = sc.parallelize(data)

  val processedRDD = dataRDD.map{
    case (inString, inInt) =>
      val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r
      val brand = brandRegEx.findFirstIn(inString)
      //val seriesRegEx = ...
      //val series = seriesRegEx.findFirstIn(inString)
      val series = "foo"
      (inString, inInt, brand, series)
  }

  processedRDD.collect().foreach(println)
  sc.stop()
}

請注意,我認為您的正則表達式存在一些問題,並且還需要一個正則表達式來查找序列。 此代碼輸出:

(BMW 1er Model,278,BMW,foo)
(MINI Cooper Model,248,NOT FOUND,foo)

但是,如果您根據需要更正了正則表達式,這就是將它們應用於每行的方法。

您好,我只是在尋找另一個問題,並得到了這個問題。 可以使用正態轉換來完成上述問題。

val a=sc.parallelize(collection)
a.map{case (x,y)=>(x.split (" ")(0)+" "+x.split(" ")(1))}.collect

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM