0
 // 4 workers
  val sc = new SparkContext("local[4]", "naivebayes")

  // Load documents (one per line).
  val documents: RDD[Seq[String]] = sc.textFile("/tmp/test.txt").map(_.split(" ").toSeq)

  documents.zipWithIndex.foreach{
  case (e, i) =>
  val collectedResult = Tokenizer.tokenize(e.mkString)
  }

  val hashingTF = new HashingTF()
  //pass collectedResult instead of document
  val tf: RDD[Vector] = hashingTF.transform(documents)

  tf.cache()
  val idf = new IDF().fit(tf)
  val tfidf: RDD[Vector] = idf.transform(tf)

上記のコード スニペットでは、collectedResult を抽出して hashingTF.transform に再利用したいと考えています。トークン化関数の署名がある場所でこれを実現するにはどうすればよいですか

 def tokenize(content: String): Seq[String] = {
...
}
4

1 に答える 1

1

mapではなく、したいようですforeach。あなたが何zipWithIndexのために使っているのか、なぜあなたがsplit自分の回線を呼び出して、もう一度mkString.

val lines: Rdd[String] = sc.textFile("/tmp/test.txt")
val tokenizedLines = lines.map(tokenize)
val hashes = tokenizedLines.map(hashingTF)
hashes.cache()
...
于 2014-11-04T09:30:28.010 に答える