You are not missing anything.
What happens is the following: 1. Astyanax creates a list of ColumnMappers one for each field of the entity under serialization. 2. Then, ColumnMappers take turns populating mutation batch. 3. For maps, MapColumnMapper is used. If you take a look at its code, you will see that it just adds key:value pairs to mutation batch. 4. When data is put in a row in cassandra, new columns from the batch are added, existing ones are overwritten, old ones unfortunately remain the same.
One solution here would be to write a custom serializer for your map and save it in one field.