Приблизительно, сколько у вас будет частых слов?Для многих разумных задач я думаю, что он должен быть неожиданно маленьким - достаточно маленьким, чтобы поместиться в память каждой отдельной машины.IIRC, слова, как правило, подчиняются распределению по степенному закону, поэтому не должно быть так много «обычных» слов.В этом случае вещание набора частых слов может быть намного быстрее, чем присоединение:
val sc = new SparkContext(...)
var commonWords: BroadCast[Set[String]] = sc.broadcast(sc.sequenceFile[String, Int](“…”).filter(_._2 > 50).collect().toSet)
def frequentWordCount(fileName:String):Long = {
val words = sc.sequenceFile[String](fileName)
words.filter(commonWords.value.contains).count
}
Если вы звоните frequentWordCount
несколько раз, вероятно, также лучше сделать это всего за одну операцию RDD, гдеваши слова ассоциируются с именем файла, а затем группируются и подсчитываются или что-то в этом роде ... особенности зависят от того, как оно используется.