Spark: возвращает все совпадения регулярных выражений для каждой строки набора данных - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть набор данных, загруженный из файла .csv (здесь имитируется ds), который содержит 2 строки: одна с датой публикации статьи (publishDate), а другая с упомянутыми именами и смещением их символов в эта статья (allNames).

Я пытаюсь подсчитать, сколько раз имя упоминается в день, и я подумал, что было бы хорошо начать с удаления смещений символов в allNames, отображая операцию регулярного выражения. Посмотрите на код:

import org.apache.spark.sql._
import org.apache.spark.sql.types._

case class Data(publishDate: String, allNames: String)

val ds = Seq(Data("01-01-2018", "Channel One,628;Channel One,755;Channel One,1449;Channel One"),
             Data("01-02-2018", "Waite Park,125;City Food,233;Adobe Flash Player,348;Charter Channel,554")).toDS()

val pattern = """([^\;\,]+),\d+""".r

val processed_ds = ds.map(data => (data.publishDate, (for (m <- pattern.findAllMatchIn(data.allNames)) yield m.group(1)).toList))

Что дает полный список ошибок, когда я звоню processed_ds.collect().foreach(println).

Что здесь происходит не так?

ПРИМЕЧАНИЕ: я новичок в Scala.

Edit:

Ожидаемый результат от processed_ds.collect().foreach(println) будет:

("01-01-2018", List("Channel One", "Channel One", "Channel One", "Channel One"))
("01-02-2018", List("Waite Park", "City Food", "Adobe Flash Player", "Charter Channel"))

Или это будет легче сделать с помощью какой-либо операции разбиения?

1 Ответ

0 голосов
/ 13 сентября 2018

Если регулярное выражение не является обязательным, может быть решено с помощью функции "split":

val result = ds.map(v => (v.publishDate, v.allNames.split(";").map(p => p.split(",")(0)).toList))
result.collect().foreach(println)

Выход:

(01-01-2018,List(Channel One, Channel One, Channel One, Channel One))
(01-02-2018,List(Waite Park, City Food, Adobe Flash Player, Charter Channel))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...