我需要知道这个问题的答案,但我需要一些帮助,因为我想不出来。谢谢你的时间。
如何修改mapper函数,以便程序计算每个不同单词的文档频率(即,包含该单词的文档数)?
class MAPPER
method MAP(docid i, doc d)
for all term t ∈ doc d do
EMIT(term t, count 1)
class REDUCER
method REDUCE(term t, counts [c1, c2, . . .])
sum ← 0
for all count c ∈ counts [c1,c2,...] do
sum ← sum + c
EMIT(term t, count sum)
我的解决方案,但我不知道是否正确。
class MAPPER
method MAP(docid i, doc d)
for all term t ∈ doc d do
for all document d ∈ doc d do
EMIT(term t, count + 1)
1条答案
按热度按时间k0pti3hp1#
我希望下面的步骤能对你有所帮助。我只是简单地告诉你这个想法,你可以把它转换成一个算法。
首先,必须在Map器类的
setup()
方法。请参阅下面的片段,从mapper类的
map()
方法,将每个单词作为键发出,并将值作为字符串发出,字符串与setup()中找到的文件名和int值1关联。从你班的
reduce()
方法,对于每个不同的单词,您将获得字符串列表,其中每个字符串将包含相应的文件名和计数1。迭代每个键的值列表,拆分每个值,然后将文件名存储在一个不重复的本地集合中,如hashset和dosum of the count 1。
在对值列表进行迭代之后,您将得到所有count 1的和,以及当前键的具有不同文件名的哈希集。这里hashset的大小将是键的文档频率。
从reducer发出关键字、字数和文档频率,然后重置sum变量和hashset。