基于 1.4 ( https://spark.apache.org/docs/1.4.0/mllib-feature-extraction.html ) 的 Spark 文档,我正在编写一个 TF-IDF 示例,用于将文本文档转换为值向量。给出的示例显示了如何做到这一点,但输入是没有键的 token RDD。这意味着我的输出 RDD 不再包含索引或键来引用原始文档。这个例子是这样的:
documents = sc.textFile("...").map(lambda line: line.split(" "))
hashingTF = HashingTF()
tf = hashingTF.transform(documents)
我想做这样的事情:
documents = sc.textFile("...").map(lambda line: (UNIQUE_LINE_KEY, line.split(" ")))
hashingTF = HashingTF()
tf = hashingTF.transform(documents)
并得到结果
tf
变量包含 UNIQUE_LINE_KEY
值某处。我只是错过了一些明显的东西吗?从示例看来,没有好的方法可以链接 document
RDD 与 tf
RDD。
最佳答案
我也遇到了同样的问题。在文档的示例中,他们鼓励您直接在 RDD 上应用转换。
但是,您可以对向量本身应用转换,这样您就可以以任何方式保留 key 。
val input = sc.textFile("...")
val documents = input.map(doc => doc -> doc.split(" ").toSeq)
val hashingTF = new HashingTF()
val tf = documents.mapValues(hashingTF.transform(_))
tf.cache()
val idf = new IDF().fit(tf.values)
val tfidf = tf.mapValues(idf.transform(_))
请注意,此代码将产生 RDD[(String, Vector)] 而不是 RDD[Vector]
关于apache-spark - 如何保留 Spark HashingTF() 函数的输入键或索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151163/