我打算在mapreduce作业中重用这些对象来节省一些内存。
只是想知道并检查AvroKey和AvroValue类是否在avro映射库中提供可写的?
No。它们只是包装类。您可以通过修改基础数据来节省内存。
GenericData.Record record = new GenericData.Record(schema);
record.put("name", "Bob");
record.put("age", 10);
AvroKey<GenericData.Record> avroKey = new AvroKey<>(record);
context.write(avroKey, NullWritable.get());
record.put("name", "Mike");
record.put("age", 11);
context.write(avroKey, NullWritable.get());
尽管可变对象是bug的常见来源。考虑在重构之前和之后测量内存消耗。