我尝试对List [Row]数据集进行排序,这就是我为它做的。
def getDiffMinute(ts1:Timestamp, ts2:Timestamp) : Long = {
if(ts1==null || ts2==null) 0
else (ts1.getTime - ts2.getTime) / 60000
}
myList.sortWith( (r1: Row, r2: Row) =>
MYUtils.getDiffMinute( r1.getAs[Timestamp]("time"), r2.getAs[Timestamp]("time")) < 0
)
由于getDiffMinute函数返回Long类型数据并且wort需要bool类型,因此无法获得异常。 某些数据列表工作得很好,但其他数据列表(特别是超过1GB的大数据)不能用于此错误。
Comparison method violates its general contract
有这个想法吗?
答案 0 :(得分:2)
我认为是因为你的比较器getDiffMinute没有正确编写。 在你的情况下,假设B为null,则diff(A,B)= 0,diff(B,C)= 0,因此diff(A,C)也应为0,但如果A和C都不是,则它可以是任何东西空值。
更多信息: http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html#compare(T,%20T)