2012-07-24 13 views
6

से एक साधारण एवरो फ़ाइल पढ़ना मैं एचडीएफएस में संग्रहीत एवरो फ़ाइल का एक साधारण पढ़ने की कोशिश कर रहा हूं। मुझे पता चला कि यह स्थानीय फाइल सिस्टम पर कब पढ़ा जाए ....एचडीएफएस

FileReader reader = DataFileReader.openReader(new File(filename), new GenericDatumReader()); 

for (GenericRecord datum : fileReader) { 
    String value = datum.get(1).toString(); 
    System.out.println("value = " value); 
} 

reader.close(); 

मेरी फ़ाइल एचडीएफएस में है, हालांकि। मैं ओपन रीडर को पथ या FSDataInputStream नहीं दे सकता। मैं एचडीएफएस में एवरो फाइल को कैसे पढ़ सकता हूं?

संपादित करें: मुझे यह एक कस्टम क्लास (SeekableHadoopInput) बनाकर काम करने के लिए मिला है जो SeekableInput लागू करता है। मैंने गिटब पर "गैंग्लियन" से इसे "चुरा लिया"। फिर भी, ऐसा लगता है कि इसके लिए एक हडोप/एवरो एकीकरण पथ होगा।

धन्यवाद

उत्तर

21

FsInput वर्ग (एवरो-mapred submodule में है, क्योंकि यह Hadoop पर निर्भर करता है) कर सकते हैं। यह एरो डेटा फ़ाइलों के लिए आवश्यक लचीला इनपुट स्ट्रीम प्रदान करता है।

Path path = new Path("/path/on/hdfs"); 
Configuration config = new Configuration(); // make this your Hadoop env config 
SeekableInput input = new FsInput(path, config); 
DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(); 
FileReader<GenericRecord> fileReader = DataFileReader.openReader(input, reader); 

for (GenericRecord datum : fileReader) { 
    System.out.println("value = " + datum); 
} 

fileReader.close(); // also closes underlying FsInput 
संबंधित मुद्दे