如何首先提取模式,然后从 Java 的 avro 文件中提取数据?与此问题相同,但在 java 中除外。
我已经看到了如何从 avsc 文件而不是 avro 文件获取架构的示例。我应该往哪个方向看?
Schema schema = new Schema.Parser().parse(
new File("/home/Hadoop/Avro/schema/emp.avsc")
);
如何首先提取模式,然后从 Java 的 avro 文件中提取数据?与此问题相同,但在 java 中除外。
我已经看到了如何从 avsc 文件而不是 avro 文件获取架构的示例。我应该往哪个方向看?
Schema schema = new Schema.Parser().parse(
new File("/home/Hadoop/Avro/schema/emp.avsc")
);
如果您想知道 Avro 文件的架构,而不必生成相应的类或关心文件属于哪个类,您可以使用GenericDatumReader
:
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<>(new File("file.avro"), datumReader);
Schema schema = dataFileReader.getSchema();
System.out.println(schema);
然后您可以读取文件中的数据:
GenericRecord record = null;
while (dataFileReader.hasNext()) {
record = dataFileReader.next(record);
System.out.println(record);
}
感谢@Helder Pereira 的回答。作为补充,模式也可以从getSchema()
实例GenericRecord
中获取。
这是一个关于它的现场演示,上面的链接显示了如何在 java 中获取数据和模式Parquet
,ORC
以及AVRO
数据格式。
您可以使用此处显示的数据块库https://github.com/databricks/spark-avro它将 avro 文件加载到Dataframe
( Dataset<Row>
)
一旦你有了Dataset<Row>
,你可以直接使用df.schema()