2015-11-06 121 views
4

我對Spark的rdd.take(n)和rdd.takeOrdered(n)如何工作有點困惑。有人可以用一些例子向我解釋這兩種方法嗎?謝謝。On Spark的RDD的採取和採取訂購方法

+1

如果你解釋你發現了什麼讓你感到困惑,那將會更容易。它是實現本身還是隻是一個如何使用這些的方法?或者也許別的東西? – zero323

+0

@ zero323基本上,如何使用這些。這是在我的同事的代碼中,我試圖理解他的代碼,但是對Scala/Spark來說是新手,我很難過。他出去了,現在不能問他。 – menorah84

回答

7

爲了解釋我們是如何排序的作品創建RDD與整數從0到99:

val myRdd = sc.parallelize(Seq.range(0, 100)) 

我們現在可以執行:

myRdd.take(5) 

至極將提取的第5個要素RDD,我們將獲得一個Array [Int],包含myRDD的前5個整數:'0 1 2 3 4 5'(沒有排序功能,只是前5個元素的前5個元素)

takeOrd ERED(5)操作以類似的方式運行:它會提取RDD的第5個元素爲一個數組[INT]但我們不得不機會來指定排序標準:

myRdd.takeOrdered(5)(Ordering[Int].reverse) 

將提取的第5元素根據指定的順序。在我們的情況下,結果將是:99 98 97 96 95'

如果你在你的RDD更復雜的數據結構,你可能要與操作執行自己的排序函數:

myRdd.takeOrdered(5)(Ordering[Int].reverse.on { x => ??? }) 

根據您的自定義排序功能,將RDD的前5個元素提取爲Array [Int]。