我正在尝试对存储在 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 提供 Path 或 FSDataInputStream。如何简单地读取 HDFS 中的 Avro 文件?
编辑:我通过创建一个实现 SeekableInput 的自定义类 (SeekableHadoopInput) 来实现这一点。我从 github 上的“Ganglion”“偷”了这个。不过,似乎会有一个 Hadoop/Avro 集成路径。
Thanks
The FsInput http://avro.apache.org/docs/1.7.3/api/java/org/apache/avro/mapred/FsInput.html类(在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)