Issue:物件不可序列化Spark Avro實木複合地板書寫器
請問您可以看看如何解決這個問題。能夠像正確打印一樣正確讀取它。但在寫入記錄實木複合地板越來越
對象不能序列
所致:java.io.NotSerializableException: parquet.avro.AvroParquetWriter序列化堆棧: - 對象不是 序列化(類:parquet.avro .AvroParquetWriter,值: [email protected])
請仔細閱讀,並讓我知道什麼是做到這一點的最好辦法。
代碼:Coverting的Avro記錄鑲木地板
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())
}
謝謝你的方法。但問題是這是數組,列表,地圖的嵌套結構。非常大的嵌套avro。所以扁平化需要遍歷所有的元素,並得到所需的任何東西。 – Ankur
如果您提出並接受了其中一個答案,那將會很好。我回答了你問的每個問題。 @Ankur – mark