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

标签 apache-spark apache-spark-mllib tf-idf

基于 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/

相关文章:

java - 向 EC2 集群提交作业超时

linux - 无法使用spark-shell启动spark

java - 如何在 Java Spark 中读取文本文件并将其转换为数据集?

pyspark - 在 Spark 中使用逻辑回归计算估计值、Wald-Chi 平方统计量、p 值的标准误差

python - Theano GPU 计算比 numpy 慢

apache-spark - Pyspark:重新分区与分区

r - 解码 SparkR 数据框

apache-spark - 使用 ALS.recommendation 得到错误的推荐

java - Spark TF-IDF 从哈希中获取单词

java - 从对 lucene 索引的查询中获取 vector 空间模型 (tf-idf)