Я учусь сериализовать данные с помощью avro. Я хотел бы сериализовать больший набор данных. Может кто-нибудь помочь мне, как перебрать больший набор данных без
жесткое кодирование GenericRecordbuilder?
Я хотел бы просто прочитать файл Json и добавить все данные в запись.
тогда я хотел бы закодировать данные Json.
// built a schema
val schema = SchemaBuilder
.record("test")
.fields
.name("name").`type`().stringType().noDefault()
.name("ID").`type`().intType().noDefault()
.endRecord()
//how the schema looks like: {"type":"record","name":"test","fields": [{"name":"name","type":"string"},{"name":"ID","type":"int"}]}
здесь я использовал для создания объекта GenericRecordBuilder:
val obj = new GenericRecordBuilder(schema)
.set("name", "anna")
.set("ID", 2)
.build
Здесь я хотел бы загрузить файл avro
например:
val jsonDatei = spark.sqlContext.read.json("/home/learnAvro/data.json") // type: dataframe
А потом я хотел бы закодировать Json (не просто одну запись, все записи), но я не знаю как. У меня есть следующие "рамки":
val writer = new GenericDatumWriter[GenericRecord](schema)
val baos = new ByteArrayOutputStream
val jsonEncoder = EncoderFactory.get.jsonEncoder(schema, baos)
writer.write(obj, jsonEncoder)
jsonEncoder.flush()
данные json выглядят так:
{"name": "anna", "ID": 2}
{"name": "frank", "ID": 5}
{"name": "anton", "ID": 1}