在 Spark 分区中获取前 n 个排序元素的有效方法



我在Spark中从数组创建了一个RDD。我想从每个分区上获取 n 个最小的元素。 我每次都在每个分区对迭代器进行排序,并取前 n 个元素并用 arr1 的元素替换它们。我所做的方法是

var arr = (1 to 50000).toArray
val n = 50
val iterations = 100  
val r = new Random() 
val arr1 = Array.fill(n)(r.nextInt(10)) 
val rdd = sc.parallelize(arr,3)
rdd.mapPartitionsWithIndex{(index , it) =>  
it=it.sortWith(_<_)
for(i<- 0 until n){
it(i) = arr1(i)   
}
it
}

我想问一下是否有任何有效的方法来在 Scala 中执行相同的任务

rdd.sortBy(x=>x)
.foreachPartition(y=>println(y.take(n).toList))

将 println 替换为您的用例

最新更新