2016-06-15 4 views
2

でSequenceFileInputFilter.Filterの使用である私はSequenceFileInputFilter.Filterは、我々はできる、ここで我々は、現在の処理鍵は、私たちの関心がない場合は、現在の処理キーを確認置くことができ、ブールを返す方法を、受け入れる持って見ることができますその行を処理からスキップしてください。Hadoopの

私が知っている限り、シーケンスファイルを読んでいるうちに、hadoopはシーケンスファイルからマッパー入力キークラス情報を取得します(クラスに関するメタデータ)。 そのことはできませんので、もしそれについて

答えて

1

私の理解では、このように書き、次に何がFilterクラスのリアルタイムでの使用になり、それは、キークラスの異なる種類を持っている一つの配列ファイルいる可能性があり :

として私たちは以下のようにカスタムキーとマッパークラスを作成することができます。

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

とマップ・メソッドは次のようになり

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

SequencefileReaderは、ファイルにあるメタデータから鍵のクラスを読み取って とし、その情報を使ってオブジェクトを作成します。これはmapメソッドに渡されます。 その場合には、それはいくつかのランタイム例外に

  • を投げるだろう、シーケンスファイルはマッパーの入力キークラスから別のKeyクラスを持っている場合、コードをより堅牢にするために

    1. をフィルターを実装するための2つの理由があるかもしれませんディレクトリを入力として渡すと、ファイルの中にはSequencesファイル内の異なるキーを持つ可能性があります。

      上記の両方のケースでは、フィルタの機能を利用してそのようなレコードの処理をスキップできます。