Apache Spark RDD的全局顺序访问

时间:2015-02-27 07:18:23

标签: apache-spark sequential rdd

我想在RDD上实现一些顺序算法。

例如:

val conf = new SparkConf()
conf.setMaster("local[2]").
  setAppName("SequentialSuite")
val sc = new SparkContext(conf)
val rdd = sc.
  parallelize(Array(1, 3, 2, 7, 1, 4, 2, 5, 1, 8, 9), 2).
  sortBy(x => x, true)
rdd.foreach(println)

我想在屏幕上看到有序号码,但它显示无序整数。这两个分区同时执行println

如何让RDD执行全局顺序功能?

1 个答案:

答案 0 :(得分:1)

我根据Spark: Best practice for retrieving big data from RDD to local machine找到答案:

val rdd : RDD[Int] = sc.parallelize(Array(1, 3, 2, 7, 1, 4, 2, 5, 1, 8, 9)).sortBy(x => x, true)
for(p <- rdd.partitions) {
    val partrdd = rdd.mapPartitionsWithIndex((i : Int, iter : Iterator[Int]) => if (i == p.index) iter else Iterator(), true)
    partrdd.foreach(println)
}