Спарк Scala Regex -> Создание нескольких столбцов на основе регулярных выражений

голоса
0

Скажем, у меня есть текстовый файл с данными, как, например ..

my sample data set kdf/dfjl/ looks like this

У меня есть регулярное выражение, которое может захватить все это в группы. Значения я хотел бы поставить в моих колонках будет так.

желаемые значения из групп

Я хотел бы каждую группу, чтобы стать его собственный столбец в РДУ

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

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

Я попробовал несколько различных методов для получения матчей из регулярных выражений из в разные колонки, как ToArray, toSeq, но даже близко не еще.

Я знаю, как существует данных внутри матчей ....

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

Это те «Э, что я после этого .. но не имея много удачи, что получить данные выделены в мой РД.

Спасибо

Задан 02/09/2018 в 05:15
источник пользователем
На других языках...                            


1 ответов

голоса
2

Я предложил бы использовать for-comprehension, а не для цикла, чтобы сгенерировать список групп , выделенных на одну строку и отобразить список элементов в отдельных колонках:

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)] = ...
Ответил 02/09/2018 в 06:15
источник пользователем

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