我希望在Scala中使用 RDD.max 从RDD中获取最大值。我的RDD包含一堆字段 持续时间 ( 长 类型)的VO。我尝试使用以下代码,但它仅适用于 Int ,而不适用于 Long (根据文档)
val vo1 = new MyVO()
vo1.setDuration(1234L)
val vo2 = new MyVO()
vo2.setDuration(123L)
val a = Array(vo1, vo2)
val sc = prepareConfig()
val rdd = sc.parallelize(a)
val maxKey2 = rdd.max()(new Ordering[MyVO]() {
override def compare(x: MyVO,
y: MyVO): Long =
Ordering[Long].compare(x.duration, y.duration)
})
println(maxKey2.duration)
我指的是这篇文章 How to find max value in pair RDD?。 但在我的情况下,我不知道如何处理Long。任何帮助高度赞赏
答案 0 :(得分:2)
该上下文中compare
的结果始终为Int
(无论您比较哪种类型,请查看compare
的定义特质Ordering
)。
在比较Long
值时,compare
函数可以简化为:
override def compare(x: TransactionSummeryVO, y: TransactionSummeryVO): Int =
x.duration.compareTo(y.duration)