2015-05-29 14 views
6

RozważmyZamawianie RDD [ciąg]

val animals = List("penguin","ferret","cat").toSeq 
val rdd = sc.makeRDD(animals, 1) 

Chciałbym zamówić RDD. Jestem nowy w Scali i trochę zdezorientowany, jak to zrobić.

+0

Nie mam żadnej wiedzy na temat iskry, ale może to jest twoja odpowiedź: http://apache-spark-user-list.1001560.n3.nabble.com/How-to-sort-an-RDD-td1922.html – MeiSign

Odpowiedz

6

Dokumentacja RDD znajduje się pod numerem . Spójrz na sortBy:

sortBy[K](
    f: (T) ⇒ K, 
    ascending: Boolean = true, 
    numPartitions: Int = this.partitions.size 
) 

K jest typem fragmencie z RDD jesteś sortowania wg. f to funkcja, którą możesz zdefiniować gdzie indziej przy pomocy def i przekazać ją według nazwy lub możesz utworzyć anonimowo w linii (która jest bardziej scala-podobna). ascending i numPartitions powinny być zrozumiałe.

Więc biorąc pod uwagę to wszystko, spróbuj:

rdd.sortBy[String]({animal => animal}) 

Następnie spróbuj tego:

rdd.sortBy[String]({animal => animal}, false) 

I wtedy ten, który sortuje RDD przez liczbę liter „e” w nazwie zwierzę, od najbardziej do najmniej:

rdd.sortBy[Int]({a => a.split("").filter(char => char == "e").size}, false) 

należy zauważyć, że oryginalny rdd nie jest posortowana - nowy, posortowany RDD jest zwracany przez operację.

+0

W pierwszym przypadku zwracamy tylko to, co podajemy, ale przestrzegamy kolejności alfabetycznej, dlaczego tak jest? Co to ma wspólnego z ukrytym zamawianiem [K]? – Chris

+0

Następuje domyślne porządkowanie [K], gdzie K jest takie samo jak K w sortBy [K]. Możesz zastąpić Ordering [K] Wierzę, ale nigdy nie miałem takiej potrzeby. –

+0

Wygląda na to, że możesz w tym przypadku zupełnie pominąć anonimową funkcję? To część tego, co mnie myli, ale rozumiem, co wyłożyłeś i było bardzo pomocne. – Chris