We shouldn't create the deep copy here - because this will create tons of objects that are not needed on the map side. 

I think an easier way to solve this problem is outlined in the earlier email I sent you. If the table have the same partitioners, we should convert all ReduceKeyMapSide to ReduceKeyReduceSide (by copying the byte array). This way it simplifies your join code a little bit (no more type checking in the while loop), and also makes the compare function in ReduceKey easier to implement.