MapReduce實現倒排索引(簡單思路)

yanke_shanghai發表於2016-06-14


倒排索引
(Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在一個文件或者一組文件中的儲存位置的對映。它是文件檢索系統中最常用的資料結構。透過倒排索引,可以根據單詞快速獲取包含這個單詞的文件列表。倒排索引主要由兩個部分組成:“單詞詞典”和“倒排檔案”。

  
有兩種不同的反向索引形式:
  一條記錄的水平反向索引(或者反向檔案索引)包含每個引用單詞的文件的列表。
  一個單詞的水平反向索引(或者完全反向索引)又包含每個單詞在一個文件中的位置。
後者的形式提供了更多的相容性(比如短語搜尋),但是需要更多的時間和空間來建立。
現代搜尋引擎的索引都是基於倒排索引。相比“簽名檔案”、“字尾樹”等索引結構,“倒排索引”是實現單詞到文件對映關係的最佳實現方式和最有效的索引結構.

1.map階段:將單詞和URI組成Key值(如“MapReduce :1.txt”),將詞頻作為value。

利用MR框架自帶的Map端排序,將同一文件的相同單詞的詞頻組成列表,傳遞給Combine過程,實現類似於WordCount的功能。

Class Map {
    method map(){ 
    //獲取輸入分片對應的檔名 
        String fileName=((FileSplit)context.getInputSplit()).getPath().getName(); 
    for(String word : value.split()){ 
        //輸出:---<"MapReduce:1.txt",1> 
                context.write(new Text(word+":"+fileName), new Longwritable(1))
        }
    }
}

2.Combiner階段:將key值相同的value值累加,得到一個單詞在文件中的詞頻。

如果直接將Map的輸出作為Reduce的輸入,當前key值(由單詞、URI組成)無法保證相同的word會分發到同一個Reduce處理,所以必須修改key值和value值。將單詞作為key值,URI和詞頻作為value值,可以利用MR框架預設的HashPartitioner類完成分割槽過程,將相同單詞的所有記錄傳送給同一個Reducer處理。

Class Combine{

    method reduce(){ 
        for(Long long : v2s){ 
            //詞頻求和 
                        sum += Long.parseLong(long.toString());
        } 
        //輸出:----<"Mapreduce","0.txt:2"> 
                context.write(new Text(word), new Text(fileName+":"+sum));        
    }
}

3.reduce階段:將相同key值的value值組合成倒排索引檔案所需的格式即可。

Class Reduce{

    method reduce(){
    
        String valueList = new String(); 
        //輸入:<"MapReduce",list("0.txt:1","1.txt:1","2.txt:1")> 
        for(Text text : v2s){      
            valueList += text.toString()+";";
        } 
        //輸出:<"MapReduce","0.txt:1,1.txt:1,2.txt:1">
               context.write(key, new Text(valueList));        
    }
}

注意事項:本例項設計的倒排索引在檔案數目上沒有限制,但是單詞檔案不宜過大,要保證每個檔案對應一個 split。否則,由於 Reduce 過程沒有進一步統計詞頻,最終結果可能會出現詞頻未統計完全的單詞。

解決方案

  1. 覆寫 InputFormat 類將每個輸入檔案分為一個 split,避免上述情況。
  2. 執行兩次 MR 任務,第一次 MR 用於統計詞頻,第二次 MR 用於生成倒排索引。
可以利用複合鍵值對等實現包含更多資訊的倒排索引。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30316686/viewspace-2119952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章