如何在Java / Scala中将实木复合地板架构转换为Avro

时间:2019-01-12 12:12:19

标签: hadoop avro parquet parquet-mr

让我在文件系统上有镶木地板文件。如何获取镶木地板架构并将其转换为Avro架构?

1 个答案:

答案 0 :(得分:0)

使用hadoop ParquetFileReader获取Parquet模式,并将其传递给AvroSchemaConverter,以将其转换为Avro模式。 Scala代码示例:

NameHelper

您的import org.apache.avro.Schema import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path import org.apache.parquet.avro.AvroSchemaConverter import org.apache.parquet.hadoop.ParquetFileReader import org.apache.parquet.hadoop.util.HadoopInputFile object ParquetToAvroSchemaConverter { def main(args: Array[String]): Unit = { val path = new Path("###PATH_TO_PARQUET_FILE###") val avroSchema = convert(path) } def convert(parquetPath: Path): Schema = { val cfg = new Configuration // Create parquet reader val rdr = ParquetFileReader.open(HadoopInputFile.fromPath(parquetPath, cfg)) try { // Get parquet schema val schema = rdr.getFooter.getFileMetaData.getSchema println("Parquet schema: ") println("#############################################################") print(schema.toString) println("#############################################################") println // Convert to Avro val avroSchema = new AvroSchemaConverter(cfg).convert(schema) println("Avro schema: ") println("#############################################################") println(avroSchema.toString(true)) println("#############################################################") avroSchema } finally { rdr.close() } } } 项目中必须具有下一个依赖项:

SBT