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");
相关文章
相关标签/搜索