Spark RDD之 sortBy如何全局排序?


import org.apache.spark.sql.SparkSession

import scala.util.Random

object TestSortBy {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("app").master("local[*]").getOrCreate()
    val sc = spark.sparkContext
    val rdd = sc.parallelize(1 to 100)
    val radmomRdd = rdd.map(i => i + 34)//增加隨機數
  //  radmomRdd.sortBy(i => i, true).foreach(i => print(i + ","))

//    radmomRdd.sortBy(i => i, true).mapPartitionsWithIndex((idx, iter)=>{
//      println("partitionIndex" + idx + " " + iter.mkString(","))
//      iter
//    }).collect()

    // 0. 直接sortBy,各分區內有序,全局可以看到是無序的
    radmomRdd.sortBy(i => i, false).foreach(i => print(i + ","))
    println("")
    // 1. collect方法可以將RDD類型的數據轉化為數組,同時會從遠程集群是拉取數據到driver端。
    // 屬於先局部有序,再分區(合成1個區)
    radmomRdd.sortBy(i => i, false).collect().foreach(i => print(i + ","))
    println("")
    // 2.sortBy()函數的源碼,其本質也是用到了sortByKey()函數
    radmomRdd.sortBy(i => i, false,1).foreach(i => print(i + ","))
    println("")
    // 3.
    radmomRdd.zipWithIndex().sortByKey(false,1).foreach(i => print(i._1 + ","))
    println("")
    // 4.先分區,后局部有序,效率不如上面
    //radmomRdd.repartition(1).sortBy(i => i, false).foreach(i => print(i + ","))


  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM