基于 1.4 的 Spark 文档 (https://spark.apache.org/docs/1.4.0/mllib-feature-extraction.html https://spark.apache.org/docs/1.4.0/mllib-feature-extraction.html)我正在编写一个 TF-IDF 示例,用于将文本文档转换为值向量。给出的示例展示了如何做到这一点,但输入是令牌的 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 上应用转换。
但是,您可以对向量本身应用转换,这样您就可以以您选择的方式保留密钥。
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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)