2016-09-26 60 views
2

我想从RDD获得最大值使用RDD.max在斯卡拉。我的RDD包含一堆带有字段的VO 持续时间类型)。我试着用下面的代码,但它仅与诠释,而不是工作很好地(按文件)从RDD获取最大记录

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?。 但我不知道如何处理龙在我的情况。任何帮助,高度赞赏

回答

2

结果在这方面compare始终是一个Int(不管你比较哪些类型,看看在性状Ordering中的compare定义)。

当你在比较Long值,该compare功能可以简化为:

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

感谢您的答复和它的工作。我在这里有一个基本的查询。建议在RDD中使用VO?我将在RDD中拥有数百万条记录,每个VO代表我的工作转换点之后的一行。这是正确的方式? – BDR

+0

是的,可以使用案例类。 – Beryllium

+0

@Berylliums谢谢你 – BDR