2017-03-10 19 views
0

私はスパークにいくつかの基本的なプログラミングをやっているSpark-Coreで2つの異なるフィールドでソートを行うにはどうすればよいですか?

INPUTFILE:

2008,20 
2008,40 
2000,10 
2000,30 
2001,9 

マイ火花コード:

scala> val dataRDD = sc.textFile("/user/cloudera/inputfiles/year.txt") 
scala> val mapRDD = dataRDD.map(elem => elem.split(",")) 
scala> val keyValueRDD = mapRDD.map(elem => (elem(0),elem(1))) 
scala> val sortRDD = keyValueRDD.sortByKey(true,1) 
res29: Array[(String, String)] = Array((2000,30), (2000,10), (2001,9), (2008,20), (2008,40)) 

私は出力が昇順に年によってソートすることにしたいです毎年値を降順にソートする

出力予想210

2000,30 
2000,10 
2001,9 
2008,40 
2008,20 

誰かがこのような結果を得ることに私を助けることができますか?

答えて

0

年の年と値を保持するクラスを定義する必要があります。このクラスは、compareメソッドをオーバーライドしてOrderedを拡張する必要があります。このクラスのオブジェクトをキー値として使用し、sortBy操作を適用するよりも、

class TwoKeys(var first: Int, var second: Int) extends Ordered[TwoKeys] { 
    def compare(that: TwoKeys): Int = { 
     if(first == that.first){ 
     that.second - second 
     }else{ 
     first - that.first 
     } 
    } 
    } 
... 
val keyValueRDD = mapRDD.map(elem => (TwoKeys(elem(0), elem(1)), TwoKeys(elem(0), elem(1)))) 
val sortRDD = keyValueRDD.sortByKey(true,1) 
+0

はい、動作しますが、私は比較方法に関する説明を理解したいと思いますか?それは何秒ですか?私たちは減算していますか?比較メソッド –

+0

の中に書いたロジックを説明してください。うまくいく場合は、私の答えを正しいものとしてマークしてください。 – Hlib

+0

compareは-1,0または1を返します。これは、より小さく、等しい、より大きくそれぞれに対応します。 – Hlib

関連する問題