如何从 Java 中的 avro 文件中提取模式
How to extract schema from an avro file in Java
如何在 Java 中先提取模式,然后从 avro 文件中提取数据?与 this 问题相同,除了 java.
我看过有关如何从 avsc 文件而不是 avro 文件获取架构的示例。我应该看哪个方向?
Schema schema = new Schema.Parser().parse(
new File("/home/Hadoop/Avro/schema/emp.avsc")
);
您可以使用此处显示的数据砖库 https://github.com/databricks/spark-avro,它将 avro 文件加载到 Dataframe
(Dataset<Row>
)
有了 Dataset<Row>
后,您可以使用 df.schema()
直接获取架构
如果您想知道 Avro 文件的架构而不必生成相应的 classes 或关心文件属于哪个 class,您可以使用 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 的回答。作为补充,还可以从 GenericRecord
个实例的 getSchema()
中获取架构。
Here 是一个现场演示,上面的 link 显示了如何在 java 中为 Parquet
、ORC
和 AVRO
获取数据和模式数据格式。
如何在 Java 中先提取模式,然后从 avro 文件中提取数据?与 this 问题相同,除了 java.
我看过有关如何从 avsc 文件而不是 avro 文件获取架构的示例。我应该看哪个方向?
Schema schema = new Schema.Parser().parse(
new File("/home/Hadoop/Avro/schema/emp.avsc")
);
您可以使用此处显示的数据砖库 https://github.com/databricks/spark-avro,它将 avro 文件加载到 Dataframe
(Dataset<Row>
)
有了 Dataset<Row>
后,您可以使用 df.schema()
如果您想知道 Avro 文件的架构而不必生成相应的 classes 或关心文件属于哪个 class,您可以使用 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 的回答。作为补充,还可以从 GenericRecord
个实例的 getSchema()
中获取架构。
Here 是一个现场演示,上面的 link 显示了如何在 java 中为 Parquet
、ORC
和 AVRO
获取数据和模式数据格式。