spark使用sortBy算子却不能实现排序

先附上一段代码:

object Test {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Test")
    val sc: SparkContext = new SparkContext(conf)

    val array: RDD[Int] = sc.parallelize(List(3,4,1,2))
    val unit: RDD[Int] = array.sortBy(x => x)
    unit.foreach(println)
    sc.stop()
  }
}

输出结果:

2
1
4
3

很奇怪,为什么sortBy算子不能对列表进行排序呢?因为sortBy主要是针对分区内排序。在创建SparkConf对象时,我们把setMaster的值设置为了“local[*]”,这会导致列表中的数据分配到不同的分区,因此无法对整个列表排序。


解决办法:

  1. 将local[*]改为local或local[1]
  2. 重新分区
object Test {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Test")
    val sc: SparkContext = new SparkContext(conf)

    val array: RDD[Int] = sc.parallelize(List(3,4,1,2))
    val unit: RDD[Int] = array.repartition(1).sortBy(x => x)  // 计算之前将数据发送到同一个分区
    unit.foreach(println)
    sc.stop()
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容