Faísca Scala Regex -> Criar várias colunas baseado em regex

votos
0

Vamos dizer que eu tenho um arquivo de texto com dados como tal ..

my sample data set kdf/dfjl/ looks like this

Eu tenho uma expressão regular que pode capturar tudo isso em grupos. Os valores que eu gostaria colocar em minhas colunas seria assim.

Os valores desejados de grupos

Eu gostaria de cada grupo para se tornar a sua própria coluna em uma 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))

Eu tentei vários métodos diferentes para obter os jogos do regex para fora em colunas diferentes, como toArray, toSeq, mas não chega nem perto ainda.

Estou ciente de como os dados existem dentro das partidas ....

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

É desses e de que eu estou atrás .. mas não ter muita sorte para conseguir que os dados separados em minha RDD.

obrigado

Publicado 02/09/2018 em 05:15
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Eu sugiro utilizando for-comprehension, em vez de para-loop, para gerar uma lista de grupos extraídos por linha e mapear os elementos da lista em colunas individuais:

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)] = ...
Respondeu 02/09/2018 em 06:15
fonte usuário

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