MYSELFAlexandre VictoorArchitecte à la [email protected]://github.com/alexvictoor@alex_victoor
"type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" ]
"type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" , "name":"product", "type": ["null", "type":"record", "namespace":"DevoxxFR.Example", "name":"Product", "default":null,
AVEC UN SEUL OBJECT DatumWriter<Trade> writer = new SpecificDatumWriter<Trade>();
encoder = EncoderFactory.get().binaryEncoder(outputStream, null);
writer.write(trade, encoder);
PUIS POUR LIRE DatumReader<Trade> reader = new SpecificDatumReader<Trade>();
decoder = DecoderFactory.get().binaryDecoder(inputStream, null);
trade = reader.read(null, decoder);
SANS GÉNÉRATION GenericRecord record = new GenericData.Record(SCHEMA);record.put("ProductId", 123);record.put("Nominal", 42000);
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(SCHEMA
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(SCHEMA
ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();
ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
dataFileWriter.setCodec(CodecFactory.snappyCodec());
ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
dataFileWriter.setCodec(CodecFactory.snappyCodec());
dataFileWriter.create(TRADE_SCHEMA, avroDataFile);
ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
dataFileWriter.setCodec(CodecFactory.snappyCodec());
dataFileWriter.create(TRADE_SCHEMA, avroDataFile);
for (GenericRecord record : records) dataFileWriter.append(record);
ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
DataFileReader<GenericRecord> dataFileReader = new DataFileReader(avroDataFile, datumReader);
ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
DataFileReader<GenericRecord> dataFileReader = new DataFileReader(avroDataFile, datumReader);
for (GenericRecord record : dataFileReader) // traitement sur chaque record
C'EST BIEN MAIS... "type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" , "name":"product", "type": ["null", "type":"record", "namespace": "DevoxxFR.Example", "name":"Product", "default":null,
LA KILLER FEATURE // la résolution de schemanew GenericDatumReader(writerSchema, readerSchema)
Writer SchemaLe schéma qui a été utilisé pour sérialiser
LA KILLER FEATURE // la résolution de schemanew GenericDatumReader(writerSchema, readerSchema)
Reader SchemaLes données dont vous avez besoin
ENTRE 2 SCHEMAS, ON PEUT- ajouter un champ- supprimer un champ- renommer un champ (avec un alias)
On ne peut pas changer le type d'un champ
RESSOURCESCes slides :
Une variante "alt.net" de cette prez :
La spec avro :
Le tuto MS :
Le SDK MS Hadoop :
https://github.com/alexvictoor/AvroDevoxxFr
https://github.com/alexvictoor/AvroAltNet
http://avro.apache.org/docs/1.7.7/spec.html
http://bit.ly/1uYRX3I
http://hadoopsdk.codeplex.com/SourceControl/latest
Top Related