【问题标题】:How to convert parquet schema to avro in Java/Scala如何在 Java/Scala 中将 parquet 模式转换为 avro
【发布时间】:2019-01-12 12:12:18
【问题描述】:

假设我在文件系统上有 parquet 文件。如何获取 parquet 架构并将其转换为 Avro 架构?

【问题讨论】:

  • 即使您的答案使用 scala,您的问题也不是关于 javascala,因此这些标签不适合这个问题。

标签: hadoop avro parquet parquet-mr


【解决方案1】:

使用 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",
)

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多