【发布时间】:2016-02-16 21:13:05
【问题描述】:
我是 Spark 的新手。我正在尝试实现 tf-idf。我需要计算每个单词在每个文档中出现的次数以及每个文档中的总单词数。
我想进行 reduce 并可能进行另一个操作,但我还不知道如何操作。 这是我的输入:
对的形式为(documentName , (word, wordCount)) ex。
("doc1", ("a", 3)), ("doc1", ("the", 2)), ("doc2", ("a", 5)),
("doc2",("have", 5))
键是文档,值是单词,以及该单词在该文档中出现的次数。我想计算每个文档中的总词数,并可能计算该词的百分比。
我想要的输出:
("doc1", (("a", 3), 5)) , ("doc1", (("the", 2), 5)),
("doc2", (("a", 5),10)), ("doc2", (("have", 5),10))
我得到了效果
corpus.join(corpus.reduceByKey(lambda x, y : x[1]+y[1]))
起点:
collect_of_docs = [(doc1,text1), (doc2, text2),....]
def count_words(x):
l = []
words = x[1].split()
for w in words:
l.append(((w, x[0]), 1))
return l
sc = SparkContext()
corpus = sc.parallelize(collect_of_docs)
input = (corpus
.flatMap(count_words)
.reduceByKey(add)
.map(lambda ((x,y), z) : (y, (x,z))))
如果可能的话,我可能只想用一个棘手的运算符进行一次 reduce 操作。任何帮助表示赞赏:) 提前致谢。
【问题讨论】:
标签: python apache-spark pyspark reduce tf-idf