Comparison method violates its general contract!

在使用spark RDD中,須要進行二次排序,二次排序須要使用到scala List的sortWith(compare),需傳遞一個比較函數compare給sortWith,這個時候會報如標題所示的錯誤。java

val rdd1 = rdd.groupByKey().sortByKey(true).map(x => (x._1,x._2.toList.sortWith(timeCompare)));

這個錯誤是jvm1.6和jvm1.7版本不同帶來的bug,前因後果參考:Comparison method violates its general contract!數組

根據參考文檔,須要強制jvm使用jdk1.6的數組排序策略,因此須要傳遞jvm參數,以下:jvm

sparkConf.set("spark.executor.extraJavaOptions", "-Djava.util.Arrays.useLegacyMergeSort=true");
相關文章
相關標籤/搜索