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

时间:2019-08-23 10:57:28

标签: arrays scala apache-spark partition

我已经从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中有什么有效的方法可以执行相同的任务

1 个答案:

答案 0 :(得分:1)

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

用用例替换println