2015-04-07 48 views
0

這是Hadoop中的數據結構實現。我想使用map-reduce編程在Hadoop中實現索引。 第1部分=我想在表中使用索引號存儲這個文本文件。 [能夠完成] 第2部分=現在我想爲這個新創建的表執行哈希[不能完成] 第一部分我能夠完成但第二部分我面臨困難 假設如果我有一個文本包含3行文件: 如何是你的工作 如何是你的家人 你好你怎麼樣map reduce程序實現hadoop框架中的數據結構

我想用索引存儲該文本文件。我有map-reduce代碼,它返回每個單詞的索引值,這個索引值可以存儲在索引表(散列表)中 包含每個單詞的索引值的輸出: how 0, how如何14, 是3 , 是18, 工作12 你7,

我們存儲在哈希表申請散列的每一個字(指數值)模塊(在文件中的不同元素的數量)讓說4.對於每一個索引值並應用散列函數(模塊'%')存儲在散列表中。如果相同位置發生碰撞,則轉到下一個位置並保存。

0%4=0(store 'how' at hash index 0) 
    14%4=2(store 'how' at has index 2) 
    18%4=2(store 'is' at hash index 3 because of collision) 
    7%4=3 (store 'your' at index 4 because of collision) 
+0

就我所知,你可以使用鏈式縮減方法。你可以發佈你的輸入文件和預期的輸出。 –

+0

讓,包含3行的文本文件: 您的工作如何。 你的家人情況如何。 你好嗎。步驟1 ::(求解)輸出包含word :: are 38,hi 32,如何0,如何14,如何34,famly 26,3是18的索引值,作業12,你的7, 步驟2 :(未解決)使用散列技術將這些索引值存儲在散列表中:0%4 = 0(在散列索引0處存儲'如何') 14%4 = 2(存儲'如何'在索引2處) 18%4 = 2 (由於碰撞,存儲'在'在散列索引3處) 7%4 = 3(由於碰撞而在索引4處存儲'你'')這就足夠了 –

回答

1

你可以創建Hashtable對象,並把鍵和值。

Hashtable hashtable = new Hashtable(); 

如何找到關鍵? Ans。你有完全不同的單詞計數和單詞的索引。 key =索引%不同的單詞 value =單詞

在將記錄插入哈希表之前,檢查是否發生該鍵的衝突。 如何檢查碰撞發生? Ans。

boolean collision=hashtable.containsKey(key); 

如果碰撞是真實的,那麼線性檢查鍵+ 1鍵+ 2,...,當你得到的碰撞是假的,使用以下行插入鍵和值在哈希表。

hashtable.put(key,value); 
+0

我應該在哪裏編寫散列表邏輯(reducer或mapper)? –

+0

在映射器中,你可以編寫這個邏輯。如果你想彙總一些東西,那麼你需要減速器。否則,你可以寫映射器。無需減速器 –

+0

其編寫程序真的很困難..... –