2

次のようなコードを書きました。

val hashingTF = new HashingTF()

val tfv: RDD[Vector] = sparkContext.parallelize(articlesList.map { t => hashingTF.transform(t.words) })
tfv.cache()

val idf = new IDF().fit(tfv)
val rate: RDD[Vector] = idf.transform(tfv)

各 articleList 項目の「レート」RDD から上位 5 つのキーワードを取得するにはどうすればよいですか?

追加:

articleList には次のオブジェクトが含まれます。

case class ArticleInfo (val url: String, val author: String, val date: String, val keyWords: List[String], val words: List[String])

words には、article のすべての単語が含まれます。

レートの構造がわかりません。ドキュメントには次のように書かれています。

@return an RDD of TF-IDF vectors
4

1 に答える 1

2

私の解決策は次のとおりです。

    (articlesList, rate.collect()).zipped.foreach { (art,tfidf) =>
  val keywords = new mutable.TreeSet[(String, Double)]
  art.words.foreach { word =>
      val wordHash = hashingTF.indexOf(word)
      val wordTFIDF = tfidf.apply(wordHash)

      if (keywords.size == KEYWORD_COUNT) {
        val minimum = keywords.minBy(_._2)
        if (minimum._2 < wordHash) {
          keywords.remove(minimum)
          keywords.add((word,wordTFIDF))
        }
      } else {
        keywords.add((word,wordTFIDF))
      }
    }

    art.keyWords = keywords.toList.map(_._1)
}
于 2015-01-06T06:33:09.453 に答える