искра RDD сортировка по двум значениям

У меня есть RDDиз (name:String, popularity:Int, rank:Int). Я хочу отсортировать это по rank, а если rank совпадает, то по popularity. Я делаю это двумя преобразованиями.

var result = myRDD
        .sortBy(_._2, ascending = false)
        .sortBy(_._3, ascending = false)
        .take(10)

Могу ли я сделать это за одно преобразование?


person safat siddiqui    schedule 01.05.2016    source источник
comment
Разве вы не можете преобразовать RDD в фрейм данных и отсортировать так df.orderBy(desc(foo), bar)   -  person Ram Ghadiyaram    schedule 01.05.2016
comment
@RamPrasadG спасибо за ваше предложение. Но мне нужна обработка RDD.   -  person safat siddiqui    schedule 01.05.2016


Ответы (1)


Вы можете попробовать сделать RDD значения ключа, где ключ будет Tuple состоять из rank и popularity, а значение будет name и отсортировано по ключу.

Например:

// _._1 - имя

// _._2 - популярность

// _._3 - ранг

var tupledRDD = myRDD.map(line => ((line._3, line._2), line._1))
.sortBy(_._1, ascending=false)
.take(10)
person Avihoo Mamka    schedule 01.05.2016
comment
правильно или просто myRDD.sortBy(line => (line._3, line._2), ascending=false) - person Tzach Zohar; 01.05.2016
comment
Спасибо. Это работает. Мне нужно знать, как работает sortBy(). Что делать, если я хочу использовать разные комбинации ASC и DESC. - person safat siddiqui; 01.05.2016
comment
ошибочно нажал. спасибо за уведомление. @AvihooMamka - person safat siddiqui; 25.08.2016