【发布时间】:2016-11-22 14:22:25
【问题描述】:
问题:对象不可序列化
请您看看如何解决这个问题。能够像正确打印一样正确阅读它。但是在将记录写入镶木地板时得到
对象不可序列化
引起:java.io.NotSerializableException: parquet.avro.AvroParquetWriter 序列化堆栈:- 对象不是 可序列化(类:parquet.avro.AvroParquetWriter,值: parquet.avro.AvroParquetWriter@658e7ead)
请查看并告诉我什么是最好的方法。
代码:将 Avro 记录转换为 Parquet
val records = sc.newAPIHadoopRDD(conf.getConfiguration,
classOf[AvroKeyInputFormat[GenericRecord]],
classOf[AvroKey[GenericRecord]], //Transforms the PairRDD to RDD
classOf[NullWritable]).map(x => x._1.datum)
// Build a schema
val schema = SchemaBuilder
.record("x").namespace("x")
.fields
.name("x").`type`().stringType().noDefault()
.endRecord
val parquetWriter = new AvroParquetWriter[GenericRecord](new Path(outPath), schema)
val parquet = new GenericRecordBuilder(schema)
records.foreach { keyVal =>
val x = keyVal._1.datum().get("xyz") -- Field
parquet.set("x", x)
.build
parquetWriter.write(schema.build())
}
【问题讨论】:
标签: hadoop apache-spark hdfs avro parquet