我对Spark的rdd.take(n)和rdd.takeOrdered(n)如何工作有点困惑。有人可以用一些例子向我解释这两种方法吗?感谢。
答案 0 :(得分:8)
为了解释排序是如何工作的,我们用0到99之间的整数创建一个RDD:
val myRdd = sc.parallelize(Seq.range(0, 100))
我们现在可以执行:
myRdd.take(5)
将提取RDD的前5个元素,我们将获得一个Array [Int]包含myRDD的前5个整数:'0 1 2 3 4 5'(没有排序函数,只有前5个元素)前5位)
takeOrdered(5)操作以类似的方式工作:它将RDD的前5个元素作为Array [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]提取。