Spark Scala Regex -> Opprette flere kolonner basert på regex

stemmer
0

La oss si jeg har en tekstfil med data som for eksempel ..

my sample data set kdf/dfjl/ looks like this

Jeg har en vanlig uttrykk som kan fange opp alt dette inn i grupper. Verdiene Jeg vil gjerne sette meg inn i kolonner ville være som dette.

ønskede verdier fra grupper

Jeg ønsker hver gruppe til å bli sin egen spalte i en RDD

val pattern = (\S+) ([\S\s]+)\ (\S+) (\S+) (\S+) (\S+).r

var myrdd = sc.textFile(my/data/set.txt)
myrdd.map(line => pattern.findAllIn(line))

Jeg har prøvd flere forskjellige metoder for å få de kampene fra regex ut i forskjellige kolonner, som toArray, toSeq, men har ikke engang komme i nærheten enda.

Jeg er klar over hvordan dataene finnes inne i kampene ....

val answer = pattern.findAllIn(line).matchData
for(m <- answer){
  for(e <- m.subgroups){
    println(e)
  }
}

Det er de 'e er at jeg er ute etter .. men ikke å ha mye hell å få disse dataene skilles ut i min RDD.

Takk

Publisert på 02/09/2018 klokken 05:15
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Jeg foreslår anvendelse av for-comprehension, i stedet for-sløyfe, for å generere en liste over ekstraherte grupper per linje og kartlegge de listeelementene til individuelle kolonner:

val rdd = sc.textFile("/path/to/textfile")

val pattern = """(\S+) "([\S\s]+)\" (\S+) (\S+) (\S+) (\S+)""".r

rdd.map{ line =>
    ( for {
        m <- pattern.findAllIn(line).matchData
        g <- m.subgroups
      } yield(g)
    ).toList
  }.
  map(l => (l(0), l(1), l(2), l(3), l(4), l(5)))
// org.apache.spark.rdd.RDD[(String, String, String, String, String, String)] = ...
Svarte 02/09/2018 kl. 06:15
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more