У меня есть набор данных, загруженный из файла .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"))
Или это будет легче сделать с помощью какой-либо операции разбиения?