作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在文件系统上有 Parquet 文件。如何获得 Parquet 方案并将其转换为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",
)
关于hadoop - 如何在Java/Scala中将 Parquet 架构转换为Avro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159454/
我是一名优秀的程序员,十分优秀!