私はhadoop map-reduceジョブの出力であるシーケンシャルファイルを持っています。 このファイルのデータはキー値のペアで書き込まれ、値自体はマップです。 MAPオブジェクトとして値を読み取って、それをさらに処理できるようにします。プログラムのhadoopシーケンシャルファイルを読むには?
Configuration config = new Configuration();
Path path = new Path("D:\\OSP\\sample_data\\data\\part-00000");
SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
Writable value = (Writable) reader.getValueClass().newInstance();
long position = reader.getPosition();
while(reader.next(key,value))
{
System.out.println("Key is: "+textKey +" value is: "+val+"\n");
}
出力:キーである:値[これはキーである]である:{ABC = 839177、XYZ = 548498、LMN = 2、PQR = 1}
は、ここでは、文字列として値を取得していしかし、私はマップのオブジェクトとしてそれをしたい。
「val」はどこから来ますか?そして、Mapは 'Writable'ではありません。あなたのm/r仕事のクラスには何を使っていますか? –
私はシーケンシャルファイルを持っていて、map reduce jobで実行していることを認識していません。次の情報が提供されています。 "それぞれのファイルをシーケンスファイルとして開く必要があります。シーケンスファイルのクラスは することができるように思うどの圧縮コーデックを使用すると、私は各キーと TypedBytesを使用してエンコードされていると思います。 – samarth
次に、キーと値のクラスを取得する必要があります。そうでなければ、正しくデシリアライズしません。 –