Как кодировать больший набор данных JSON в avro? - PullRequest
0 голосов
/ 09 июля 2019

Я учусь сериализовать данные с помощью 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 голосов
/ 09 июля 2019

Использование 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

...