2015-05-29 20 views
6

Cân nhắcđặt hàng một RDD [Chuỗi]

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

Tôi muốn đặt hàng RDD này. Tôi mới đến Scala và một chút bối rối về việc làm thế nào để được thực hiện.

+0

Tôi không biết gì về tia lửa nhưng có thể đây là câu trả lời của bạn: http://apache-spark-user-list.1001560.n3.nabble.com/How-to-sort-an-RDD-td1922.html – MeiSign

Trả lời

6

Tài liệu RDD có thể được tìm thấy here. Nhìn vào sortBy:

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

Các K là loại đoạn của RDD bạn đang sắp xếp theo. f là một chức năng mà bạn có thể xác định ở nơi khác với def và chuyển nó theo tên hoặc bạn có thể tạo một tên ẩn danh trong dòng (giống như scala hơn). ascendingnumPartitions phải tự giải thích.

Vì vậy, cho tất cả điều này, hãy thử:

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

Sau đó thử này:

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

Và rồi một này, mà sắp xếp các RDD bởi số lượng chữ "e" trong tên của động vật, từ nhiều nhất đến ít nhất:

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

Cần lưu ý rằng bản gốc rdd không được sắp xếp - một RDD mới được sắp xếp được trả về bởi thao tác.

+0

Vì vậy, trong trường hợp đầu tiên chúng tôi chỉ trả lại những gì chúng tôi cung cấp nhưng chúng tôi quan sát một thứ tự chữ cái, tại sao điều này? Nó có liên quan gì đến việc đặt hàng ngầm [K]? – Chris

+0

Nó theo thứ tự mặc định [K], trong đó K giống với K trong sortBy [K]. Bạn có thể ghi đè thứ tự [K] tôi tin, nhưng tôi không bao giờ có nhu cầu. –

+0

Có vẻ như bạn chỉ có thể bỏ qua chức năng ẩn danh hoàn toàn trong trường hợp này? Đó là một phần của những gì đã gây nhầm lẫn cho tôi, nhưng tôi hiểu những gì bạn đã đặt ra và nó đã rất hữu ích. – Chris

Các vấn đề liên quan