如何保留 Spark HashingTF() 函数输入的键或索引?

2024-03-28

基于 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某处有价值。我只是错过了一些明显的东西吗?从示例来看,似乎没有好的方法来链接documentRDD 与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(使用前将#替换为@)

如何保留 Spark HashingTF() 函数输入的键或索引? 的相关文章

随机推荐