我需要知道这个问题的解决方案,但我需要一些帮助,因为我无法弄明白。谢谢你的时间。
如何修改映射器功能,以便程序计算每个不同单词的文档频率(即包含该单词的文档数量)?
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)
答案 0 :(得分:1)
我希望以下步骤对您有所帮助。我只是向您简要介绍一下这个想法,您可以将其转换为算法。
首先,您必须找到输入拆分的文件名
由mapper在mapper类的setup()
方法中处理。参考
下面的代码段,
String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();
从Mapper类的map()
方法中,将每个单词作为键发出
value作为与setup()和int中找到的文件名对齐的字符串
价值1。
reduce()
方法中,为每个不同的单词
您将获得每个字符串将包含的字符串列表
相应的文件名和计数1。