2011-11-25 36 views
8

Sahte harita küçültme işinin çıktısı olan bir sıralı dosyam var. Bu dosyada veriler anahtar değer çiftlerine yazılır ve değer kendisini bir haritadır. Değeri daha fazla işleyebilmemiz için değeri MAP nesnesi olarak okumak istiyorum. ProgramınHamur sıralı dosya nasıl okunur?

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"); 
    } 

çıkışı: Anahtar: [Bu anahtarıdır] değeri: {= abc 839177, xyz = 548.498, LMN = 2, pqr = 1} dize olarak burada

i alıyorum değer ama bunu haritanın nesnesi olarak istiyorum.

+0

'val' nereden geliyor? Ve bir Harita 'Yazılabilir' değil, m/r işinizde sınıflar için ne kullanıyorsunuz? –

+0

Sadece sıralı bir dosyaya sahibim ve haritadaki işi azalttığını bilmiyorum.Ayrıca aşağıdaki bilgilerle sağladım. "Böyle bir dosyanın bir sıra dosyası olarak açılması gerekiyor. Bir dekompresyon codec'inin kullanılması gerekiyor - dizi dosyası sınıfı için hangi sıkıştırma codec bileşenini kullanabileceğinizi gösterir ve her bir anahtar ve her değerin TypedBytes kullanılarak kodlanmış olduğunu düşünüyorum. " – samarth

+0

O zaman anahtar ve değer sınıflarını almanız gerekir, aksi takdirde bunları düzgün bir şekilde serileştiremezsiniz. –

cevap

6

Kontrol SequenceFile#next(Writable, Writable)

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

API belgeleri SequenceFile içinde değer türünü almak için

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

Kullanım SequenceFile.Reader#getValueClassName ile değiştirilmelidir. SequenceFile, dosya üstbilgisinde anahtar/değer türlerine sahiptir.

+0

Teşekkür ederim, değer sınıfı "TypedBytesWritable" bu sınıftan harita nesnesini alabilir miyim? – samarth

+1

[TypedBytesWritable # getValue] (http://hadoop.apache.org/mapreduce/docs/current/api/org/apache/hadoop/typedbytes/TypedBytesWritable.html#getValue%28%29) Object'i almalıdır. –

+0

Hey benim için çalıştı .. Çok fazla Praveen teşekkür ederim. – samarth

İlgili konular