如何将更大的JSON数据集编码为avro?

时间:2019-07-09 09:25:42

标签: scala apache-spark avro

我正在学习使用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}

1 个答案:

答案 0 :(得分:0)

使用jsonDatei.write.format("avro").save("jsonDatei.avro")

其他详细信息:https://databricks.com/blog/2018/11/30/apache-avro-as-a-built-in-data-source-in-apache-spark-2-4.html