val vectors = [SOME RDDs]
val clusterised = vectors.groupBy(...)
// Partitioning
val tunedPartitioner = new RangePartitioner(12, clusterised)
val partitionedClusterised = clusterised.partitionBy(tunedPartitioner).persist()
// Calculate the average positions for each cluster
val averagePos = partitionedClusterised.mapValues(averageVectors)
// averagePos: RDD[(index:Int, v:Vector)]
// Update the means
val tempSorted = averagePos.sortByKey().partitionBy(tunedPartitioner).persist()
上面是一些我用来生成(索引,向量)RDD的代码,该代码按索引排序。我试图避免由sortByKey引起的乱序,但是在调试器中,“ tempSorted” RDD仍然是ShuffledRDD。
我了解到先不进行“集群化”分区可能会更有效,因为mapValues转换减小了PairRDD中值的大小(集群化为index,iterator(vectors),而averagePos为index,vector),但我仍然无法理解为什么tempSorted是ShuffledRDD。每个分区都不应该对其中的任何内容进行排序吗?是什么使tempSorted成为ShuffledRDD?