Учитывая массив слов (как СДР), вы можете получить наиболее частое слово, которое следует за данным word
в нескольких преобразованиях:
Шаг 1 : СДР пар слов с использованием скользящего (2)
.sliding(2)
Шаг 2 : пара-СДР с ключом (word, w2)
, затем reduceByKey
для подсчета вхождений пар слов данной word
.collect{ case Array(`word`, w2) => ((word, w2), 1) }
.reduceByKey( _ + _ )
Шаг 3 : пара-СДР с ключом word
, затем reduceByKey
для захвата пар слов с максимальным количеством
.map{ case ((`word`, w2), c) => (word, (w2, c)) }
.reduceByKey( (acc, x) => if (x._2 > acc._2) (x._1, x._2) else acc )
Объединение всего с преобразованиями, заключенными в методе:
import org.apache.spark.sql.functions._
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.rdd.RDDFunctions._
// load a RDD of words from the text file
val rdd = sc.textFile("/path/to/basketball.txt")
.flatMap( _.split("""[\s,.;:!?]+""") )
.map( _.toLowerCase )
def mostFreq(word: String, rdd: RDD[String]): RDD[(String, (String, Int))] =
rdd
.sliding(2)
.collect{ case Array(`word`, w2) => ((word, w2), 1) }
.reduceByKey( _ + _ )
.map{ case ((`word`, w2), c) => (word, (w2, c)) }
.reduceByKey( (acc, x) => if (x._2 > acc._2) (x._1, x._2) else acc )
Показать наиболее частое слово, которое следует за данным word
:
mostFreq("basketball", rdd).foreach{ case (word, (w2, c)) =>
println(s"'$word' is followed most frequently by '$w2' for $c times. ")
}
// 'basketball' is followed most frequently by 'leagues' for 2 times.
Пример текстового файла: /path/to/basketball.txt (содержимое Википедия ):
Баскетбол - один из самых популярных и популярных в мире.
спортивный. Национальная баскетбольная ассоциация (НБА) является одной из самых
значительные профессиональные баскетбольные лиги в мире с точки зрения
популярность, зарплаты, талант и уровень конкуренции. Вне севера
Америка, лучшие клубы из национальных баскетбольных лиг имеют право на
континентальные чемпионаты, такие как Евролига и ФИБА-Америка
Лига. Чемпионат мира по баскетболу и мужской олимпийский баскетбол
Турниры являются основными международными событиями спорта и привлекают
лучшие сборные со всего мира.