2016-03-10 168 views
2

我從日誌文件中提取ip地址並對它執行計數,現在我想根據計數值對JavaPairRDD進行排序。 你可以參考下面的代碼。如何在apache spark中執行排序JavaPairRDD

JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() { 

     @Override 
     public Integer call(Integer v1, Integer v2) throws Exception { 
      // TODO Auto-generated method stub 
      return v1 + v2; 
     } 
    }); 

上述JavaPairRDD將爲例如,輸出返回IP數,現在我想對它進行排序.. 會是這樣

(172.16.0.0,125)
(192.168.0.0, 12)
(127.168.0.44,92)

第2個值是該特定ip的計數。

回答

1

Spark不支持基於該值的排序。作爲一項解決方案,您可以交換密鑰和值對,然後根據密鑰進行排序。

檢查:

JavaPairRDD<Integer, String> swapped = counts.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() { 
      @Override 
      public Tuple2<Integer, String> call(Tuple2<String, Integer> item) throws Exception { 
       return item.swap(); 
      } 

     }); 
:使用此代碼 https://issues.apache.org/jira/browse/SPARK-3655

切換鍵和值

相關問題