[英]How to convert parquet schema to avro in Java/Scala
假設我在文件系統上有鑲木地板文件。 如何獲得鑲木地板方案並將其轉換為Avro方案?
使用hadoop ParquetFileReader獲取Parquet模式,並將其傳遞給AvroSchemaConverter,以將其轉換為Avro模式。 Scala代碼示例:
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
項目中具有下一個依賴項:
libraryDependencies ++= Seq(
"org.apache.parquet" % "parquet-avro" % "1.10.0",
"org.apache.parquet" % "parquet-hadoop" % "1.10.0",
"org.apache.hadoop" % "hadoop-client" % "2.7.3",
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.