在Spark的RDD的take和takeOrdered方法

时间:2015-11-06 09:34:27

标签: scala apache-spark

我对Spark的rdd.take(n)和rdd.takeOrdered(n)如何工作有点困惑。有人可以用一些例子向我解释这两种方法吗?感谢。

1 个答案:

答案 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]提取。