Affects Version/s: 0.21.0
Fix Version/s: 0.23.0
Hadoop Flags:Incompatible change, Reviewed
Release Note:MapWritable now implements equals() and hashCode() based on the map contents rather than object identity in order to correctly implement the Map interface.
o.a.h.io.MapWritable implements the java.util.Map interface, however it does not define an implementation of the equals() or hashCode() methods; instead the default implementations in java.lang.Object are used.
This violates the contract of the Map interface which defines different behaviour for equals() and hashCode() than Object does. More information here: http://download.oracle.com/javase/6/docs/api/java/util/Map.html#equals(java.lang.Object)
The practical consequence is that MapWritables containing equal entries cannot be compared properly. We were bitten by this when trying to write an MRUnit test for a Mapper that outputs MapWritables; the MRUnit driver cannot test the equality of the expected and actual MapWritable objects.
|Field||Original Value||New Value|
|Status||Open [ 1 ]||Patch Available [ 10002 ]|
|Hadoop Flags||[Incompatible change]|
|Assignee||Nicholas Telford [ nicktelford ]|
|Status||Patch Available [ 10002 ]||Resolved [ 5 ]|
|Hadoop Flags||[Incompatible change]||[Incompatible change, Reviewed]|
|Release Note||MapWritable now implements equals() and hashCode() based on the map contents rather than object identity in order to correctly implement the Map interface.|
|Fix Version/s||0.23.0 [ 12315569 ]|
|Resolution||Fixed [ 1 ]|
|Status||Resolved [ 5 ]||Closed [ 6 ]|