【发布时间】:2019-12-28 16:45:51
【问题描述】:
我已经从 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 中是否有任何有效的方法来执行相同的任务
【问题讨论】:
-
val rdd = sc.parallelize(arr,3) 你不是说 arr1 吗?
-
mapPartitions 也可以
-
不相信代码
-
不清楚,一看就不会跑
-
@thebluephantom 是 arr1 不是 arr。
标签: arrays scala apache-spark partition