2016-06-15 53 views
2

使用SequenceFileInputFilter.Filter的,我可以看到SequenceFileInputFilter.Filter有accept方法,它會返回布爾,在這裏我們可以把檢查當前處理的關鍵,如果當前處理的關鍵是我們不感興趣的,我們可以從處理中跳過該行。什麼是Hadoop中

據我所知,在讀取序列文件的同時,hadoop從序列文件中獲得映射器輸入關鍵類信息(一些關於類的元數據)。 所以是有可能,一個序列文件中有不同類型的鍵類, 如果它不是可能的,那麼這將是實時使用Filter類的

回答

1

我關於它的理解是這樣的:

由於我們可以創建如下自定義按鍵映射器類:

DerivedMapper extends Mapper<InCustomKey, Text, OutCustomKey, Text> 

和地圖的方法是

public void map(InCustomKey key, Text value, Context contx) 

因此,SequencefileReader將從文件 中的元數據中讀取密鑰的類,並使用該信息創建Object,這將傳遞給map方法。 有可能有兩個原因,實施過濾

  1. 爲了使代碼更健壯,如果序列文件已經從映射器的輸入鍵類不同的Key類,在這種情況下,它會拋出一些運行時異常

  2. 如果我們將目錄作爲輸入傳遞,那麼可能有一些文件在Sequences文件中具有不同的鍵。

    在上述兩種情況下,我們都可以利用過濾器的功能來跳過處理這些記錄。

相關問題