men*_*h84 4 scala apache-spark
我对Spark的rdd.take(n)和rdd.takeOrdered(n)如何工作有点困惑.有人可以用一些例子向我解释这两种方法吗?谢谢.
为了解释排序是如何工作的,我们创建了一个整数从0到99的RDD:
val myRdd = sc.parallelize(Seq.range(0, 100))
Run Code Online (Sandbox Code Playgroud)
我们现在可以执行:
myRdd.take(5)
Run Code Online (Sandbox Code Playgroud)
我将提取RDD的前5个元素,我们将获得一个数组[Int]包含myRDD的前5个整数:'0 1 2 3 4 5'(没有排序函数,只有前5个元素中的前5个元素)位置)
takeOrdered(5)操作以类似的方式工作:它将RDD的前5个元素作为Array [Int]提取,但我们必须有机会指定排序条件:
myRdd.takeOrdered(5)( Ordering[Int].reverse)
Run Code Online (Sandbox Code Playgroud)
将根据指定的顺序提取前5个元素.在我们的例子中,结果将是:'99 98 97 96 95'
如果您的RDD中有更复杂的数据结构,您可能希望通过以下操作执行自己的排序功能:
myRdd.takeOrdered(5)( Ordering[Int].reverse.on { x => ??? })
Run Code Online (Sandbox Code Playgroud)
这将根据您的自定义排序函数将RDD的前5个元素提取为Array [Int].