0.参考资料:
代码参考1:http://www.pudn.com/downloads212/sourcecode/unix_linux/detail999273.html
理论参考2:http://zhangyu8374.javaeye.com/blog/86307,http://nything.javaeye.com/blog/411787
1.分析
假如有file0,file1,file2三个文件,这些文件中都保存了一些文本内容,比如在file0中只有一个句子,内容为"we are happy"。一般的索引都是记录在这个文件中没有一个单词的索引号。比如file0的索引可以是(we,0),(are,1),(happy,2)。这样的键值对中key是单词,value是这个单词在这个文件中的位置。但是,反向索引刚好相反,对应于多个文件,我们要求出某一个单词在所有这些文件中出现的位置。我们可以按如下操作进行实验:
在本地创建文件夹IndexTest并在里面创建3个文件,每个文件中的内容如下。
* T0 = "it is what it is"
* T1 = "what is it"
* T2 = "it is a banana"
其中T0,T1,T2分别是文件名,后面为文件内容。将IndexTest文件夹上传到DFS中。然后运行反向索引程序。反向索引程序见代码示例。
最后输出结果为:
a (T2, 3)
banana (T2, 4)
is (T2, 2) (T0, 2) (T0, 5) (T1, 2)
it (T1, 3) (T2, 1) (T0, 1) (T0, 4)
what (T0, 3) (T1, 1)
2.代码示例
InvertedIndex.java

TokenInputFormat.java

ValuePair.java

ps:2012-5-20
这里键值对valuepair的运用让我想到了前几天写的Hashmap实现原理。在hashmap的实现过程中,也运用了键值对类Entry。 两者之间有共通之处,有空可以再改进Hashmap实现原理。
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/01/07/2297043.html,如需转载请自行联系原作者