dve*_*eim 14 sorting apache-spark
假设我有一个字符串列表.我对它们进行过滤和排序,并将结果收集到驱动程序中.然而,事物是分布式的,每个RDD都有自己原始列表的一部分.那么,Spark如何实现最终排序顺序,它是否合并结果?
zer*_*323 25
Spark中的排序是一个需要改组的多阶段过程:
sample后跟collect)rangePartitioner在第一步(partitionBy)中计算的边界进行分区mapPartitions)收集数据时,剩下的就是遵循分区程序定义的顺序.
以上步骤清楚地反映在调试字符串中:
scala> val rdd = sc.parallelize(Seq(4, 2, 5, 3, 1))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at ...
scala> rdd.sortBy(identity).toDebugString
res1: String =
(6) MapPartitionsRDD[10] at sortBy at <console>:24 [] // Sort partitions
| ShuffledRDD[9] at sortBy at <console>:24 [] // Shuffle
+-(8) MapPartitionsRDD[6] at sortBy at <console>:24 [] // Pre-shuffle steps
| ParallelCollectionRDD[0] at parallelize at <console>:21 [] // Parallelize
Run Code Online (Sandbox Code Playgroud)