2016-09-26 102 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