1

別のエンドポイント (サーバー) に送信する必要がある POJO があります。私はavroを使用してそれを行うことにしました。

ここまでで、Avroスキーマを作成し、DataFileWriter を生成しました。

GenericRecord user1 = new GenericData.Record(schema);
user1.put("name", "Jenny");
user1.put("favorite_color", "green");


GenericRecord user2 = new GenericData.Record(schema);
user2.put("name", "Kevin");
user2.put("favorite_color", "red");

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, schemaFile);
dataFileWriter.append(user1);
dataFileWriter.append(user2);

これは私がこれまでに持っているものであり、次のものがありません。

データを送信する前に圧縮したいのですが、snappyを使用して圧縮したいのですが、コードとどのように組み合わせる必要がありますか?

更新: 次の行を追加しました:

// use snappy compression
CodecFactory codecFactory = CodecFactory.snappyCodec();
dataFileWriter.setCodec(codecFactory);

しかし、それが機能するかどうかはまだわかりません。

4

1 に答える 1

1

これを使用して:

    public byte[] serialize(T objectToSerialize) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DatumWriter<T> reflectDatumWriter = new ReflectDatumWriter<T>(avroSchema);
DataFileWriter<T> fileWriter = null;
try {
    fileWriter = new DataFileWriter<T>(reflectDatumWriter);
    fileWriter.setCodec(CodecFactory.snappyCodec());
    fileWriter.create(avroSchema, out);
    fileWriter.append(objectToSerialize);
    fileWriter.close();
} catch (Exception e) {
    LOG.error(e);
    return null;
}
return out.toByteArray();
}
于 2013-10-10T09:16:49.177 に答える