Как написать Spark Dataframe с типом набора данных [Array [Byte]] HDFS - PullRequest
0 голосов
/ 29 апреля 2020

Я использую 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 файла и прочитать его обратно.

...