我正在学习使用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}
答案 0 :(得分:0)
使用jsonDatei.write.format("avro").save("jsonDatei.avro")
。