如何设计mapreduce伪代码来计算单词出现的文档数?

6rqinv9w  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(529)

我需要知道这个问题的答案,但我需要一些帮助,因为我想不出来。谢谢你的时间。
如何修改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)
k0pti3hp

k0pti3hp1#

我希望下面的步骤能对你有所帮助。我只是简单地告诉你这个想法,你可以把它转换成一个算法。
首先,必须在Map器类的 setup() 方法。请参阅下面的片段,

String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();

从mapper类的 map() 方法,将每个单词作为键发出,并将值作为字符串发出,字符串与setup()中找到的文件名和int值1关联。
从你班的 reduce() 方法,对于每个不同的单词,您将获得字符串列表,其中每个字符串将包含相应的文件名和计数1。
迭代每个键的值列表,拆分每个值,然后将文件名存储在一个不重复的本地集合中,如hashset和dosum of the count 1。
在对值列表进行迭代之后,您将得到所有count 1的和,以及当前键的具有不同文件名的哈希集。这里hashset的大小将是键的文档频率。
从reducer发出关键字、字数和文档频率,然后重置sum变量和hashset。

相关问题