从RDD获取最大记录

时间:2016-09-26 15:50:45

标签: scala apache-spark

我希望在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。任何帮助高度赞赏

1 个答案:

答案 0 :(得分:2)

该上下文中compare结果始终为Int(无论您比较哪种类型,请查看compare的定义特质Ordering)。

在比较Long值时,compare函数可以简化为:

override def compare(x: TransactionSummeryVO, y: TransactionSummeryVO): Int = 
    x.duration.compareTo(y.duration)