2017-04-06 52 views
0

我有一個實現這樣一個比較類:如何使用Java自定義比較訂購火花RDD

public class MyObject<T> 
{ 
    public static class MyObjectComp<T> implements Comparator<MyObject<T>> 
     { 
      private LinkedHashSet<Integer> attrList; 

      public MyObjectComp (int[] intList) 
      { 
       this.attrList = new LinkedHashSet<Integer>(); 
       for (int idx: intList) 
        attrList.add(idx); 
      } 

      public MyObjectComp (LinkedHashSet<Integer> attrList) 
      { 
       this.attrList = attrList; 
      } 


      public int compare(MyObject<T> pf1, MyObject<T> pf2) 
      { 
       for (Integer idx: attrList) 
       { 
        double pf1Norm = pf1.atribute.get(idx).myList.size(); 
        double pf2Norm = pf2.atribute.get(idx).myList.size(); 

        if (pf1Norm > pf2Norm) 
         return 1; 
        else if (pf1Norm < pf2Norm) 
         return -1; 
       } 

       return (pf1.key > pf2.key) ? 1 : ((pf1.key < pf2.key) ? -1 : 0); 
      }  

     } 
} 

在用Scala編寫代碼的另一部分我創建了一個RDD本爲MyObject 。現在我需要使用MyObject的這個內部比較器類來排序此RDD的元素。我怎麼能做到這一點使用像myRDD. sort()?

回答

1

喜歡的東西的功能(注:沒有嘗試過這個代碼)

implicit val moo = new MyObjectComp[ T ](/* ... */).asScala 

myRDD.sortBy(t => t)