問題:オブジェクトがシリアライズできないSpark Avroから寄木細工記者
問題を解決する方法をご覧ください。適切に印刷するように正しく読み取ることができます。しかしによって引き起こさ
直列化可能ではない
オブジェクト取得寄木細工したレコードを書き込み中:java.io.NotSerializableException: parquet.avro.AvroParquetWriterシリアル化スタック: - オブジェクトではありません 、シリアライズ(クラス:parquet.avroを.AvroParquetWriter、値: [email protected])
を見直し、私はそれを行うための最善の方法であるかを教えてください。
コード:あなたはあなたがアプローチを取っている理由Covertingアブロ・レコードは、私はよく分からない
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
あなたがupvotedし、これらの回答の1つを受け入れるといいです。あなたが聞いたすべての質問に答えました。 @Ankur – mark