Я использую Avro Binary serializer для сериализации Avro Generi c Записи в Array[Byte]
. Код для создания двоичного кадра данных Avro:
def serialize(row: Row) : Array[Byte] = {
val avroSchemaParser = new Schema.Parser()
val schema = avroSchemaParser.parse("""{"name": "test_name", "type": "record", "namespace":"test_namespace", "fields":[{"name":"Name", "type": ["null", "string"], "default": null}, {"name":"Address", "type": ["null", "string"], "default": null}]}""")
val datumWriter = new GenericDatumWriter[GenericRecord](schema)
val byteArrayOutputStream = new ByteArrayOutputStream()
val encoder = EncoderFactory.get().binaryEncoder(byteArrayOutputStream, null)
datumWriter.write(row, encoder)
encoder.flush()
val bytes = byteArrayOutputStream.toBytesArray
byteArrayOutputStream.close()
bytes
}
val binaryDF: Dataset[Array[Byte]] = df.map { row => serialize(row)}
Теперь я хочу записать этот кадр данных в HDFS в виде * avro файла и прочитать его обратно.