我正在尝试简单读取存储在 HDFS 中的 Avro 文件。当它在本地文件系统上时,我发现了如何读取它....

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(); 

但是,我的文件在 HDFS 中。我无法为 openReader 提供路径或 FSDataInputStream。我怎样才能简单地读取 HDFS 中的 Avro 文件?

编辑:我通过创建一个实现 SeekableInput 的自定义类 (SeekableHadoopInput) 使其工作。我从 github 上的“Ganglion”“偷”了这个。不过,似乎会有一个 Hadoop/Avro 集成路径。

谢谢

请您参考如下方法:

FsInput类(在 avro-mapred 子模块中,因为它依赖于 Hadoop)可以做到这一点。它提供 Avro 数据文件所需的可搜索输入流。

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 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!