2011-11-25 19 views
8

Mam plik sekwencyjny, który jest wynikiem działania mapy miaoop-zmniejsz. W tym pliku dane są zapisywane w parach wartości klucza, a sama wartość jest mapą. Chcę odczytać wartość jako obiekt MAP, aby móc go przetworzyć dalej.Jak odczytać sekwencyjny plik 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"); 
    } 

wyjście z programu: Key jest: [to jest klucz] wartość: {abc = 839177, xyz = 548498, LMN = 2, pqr = 1} wartość

Tutaj otrzymuję jako ciąg , ale chcę go jako obiekt mapy.

+0

Skąd pochodzi "val"? A mapa nie jest "Writable", czego używasz do zajęć w swojej pracy m/r? –

+0

Po prostu mam plik sekwencyjny i nie jestem świadomy tego, co robią w pracy zmniejszania mapy.I dostaję następujące informacje. "Każdy taki plik musi być otwarty jako plik sekwencji.Kodowany kodek dekompresyjny musi być użyty - klasa plików sekwencji wydaje się być w stanie powiedzieć, jakiego kodeka kompresji użyć, a następnie myślę, że każdy klucz i każda wartość jest zakodowana za pomocą TypedBytes. " – samarth

+0

Następnie musisz uzyskać klasy klucza i wartości, w przeciwnym razie nie będziesz ich poprawnie deserializować. –

Odpowiedz

6

Sprawdź dokumentację API dla SequenceFile#next(Writable, Writable)

while(reader.next(key,value)) 
{ 
     System.out.println("Key is: "+textKey +" value is: "+val+"\n"); 
} 

należy zastąpić

while(reader.next(key,value)) 
{ 
     System.out.println("Key is: "+key +" value is: "+value+"\n"); 
} 

Korzystanie SequenceFile.Reader#getValueClassName uzyskać typ wartości w SequenceFile. SequenceFile ma typy klucz/wartość w nagłówku pliku.

+0

Dzięki człowieku, klasa wartości to "TypedBytesWritable" czy mogę uzyskać obiekt mapy z tej klasy? – samarth

+1

[TypedBytesWritable # getValue] (http://hadoop.apache.org/mapreduce/docs/current/api/org/apache/hadoop/typedbytes/TypedBytesWritable.html#getValue%28%29) powinien uzyskać obiekt. –

+0

Hej, zadziałało to dla mnie .. Dziękuję bardzo, Praveen. – samarth