diff --git a/src/scala/spark/DfsShuffle.scala b/src/scala/spark/DfsShuffle.scala
index a100ddf05b80cb1eda33c78d2986233fa9a4568e..e751e1bd7511addeb12f738df47b6ba4b63c2c46 100644
--- a/src/scala/spark/DfsShuffle.scala
+++ b/src/scala/spark/DfsShuffle.scala
@@ -84,7 +84,10 @@ extends Logging
         new ObjectOutputStream(fs.create(path, true))
       }).toArray
       for ((k, c) <- combiners) {
-        val bucket = k.hashCode % numOutputSplits
+        var bucket = k.hashCode % numOutputSplits
+        if (bucket < 0) {
+          bucket += numOutputSplits
+        }
         outputStreams(bucket).writeObject((k, c))
       }
       outputStreams.foreach(_.close())