我需要知道该问题的解决方案,但由于无法解决,因此需要一些帮助。谢谢你的时间。
如何修改映射器函数,以便程序计算每个不同单词的文档频率(即包含该单词的文档数量)?
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)
最佳答案
希望以下步骤对您有所帮助。我只是向您介绍这个想法,您可以将其转换为算法。
由mapper在您的mapper类的
setup()
方法中处理。引用在摘要下方,
String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();
map()
方法中,发出每个单词作为键,然后值为在setup()和int中找到的与文件名一致的字符串
值1.
reduce()
方法中,为每个不同的词您将获得字符串列表,其中每个字符串都将包含
对应的文件名和计数1.
然后将文件名存储在不可重复的本地集合中,例如HashSet
并计算总和1。
计数1,还有一个HashSet,它具有当前文件的不同文件名
键。在这里,HashSet的大小将是
键。
关于hadoop - 如何设计MapReduce伪代码以计算单词出现的文档数量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30217491/