目录

  • ​​spark outline​​
  • ​​Saprk sortBy功能​​
  • ​​案例演示​​
  • ​​案例2:对k-v形式的数据排序​​
  • ​​案例3:对对象进行排序​​
  • ​​结语:​​

spark outline

​​大纲目录​​

Saprk sortBy功能

排序
参数 ascending: Boolean = true(升序)
参数 numPartitions: Int = this.partitions.length(分区)

案例演示

需求:对List(1, 4, 3, 2, 5)升序和降序排序,然后输出到控制台

package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
* @Package : com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform
* @Desc : 排序
*/
object Spark10_SortBy {
def main(args: Array[String]): Unit = {
//创建配置文件
val conf: SparkConf = new SparkConf().setAppName("").setMaster("local[*]")
//创建SparkContext,该对象是提交的入口
val sc = new SparkContext(conf)
//创建RDD
val rdd: RDD[Int] = sc.parallelize(List(1, 4, 3, 2, 5))

//升序排序
rdd.sortBy(x => x).collect().foreach(println)
println("*******************************")
//降序排序
rdd.sortBy(x => x, false).collect().foreach(println)

//释放资源
sc.stop()
}
}

案例2:对k-v形式的数据排序

//创建RDD
val rdd: RDD[(String, Int)] = sc.makeRDD(List(("zs", 22), ("lisi", 33)))
// 按照value进行降序排序
val resRDD: RDD[(String, Int)] = rdd.sortBy(_._2, false)
// 按照key进行降序排序
val resRDD1: RDD[(String, Int)] = rdd.sortBy(_._1, false)
resRDD.collect().foreach(println)
println("*************************")
resRDD1.collect().foreach(println)

​结果:​

(lisi,33)
(zs,22)
*************************
(zs,22)
(lisi,33)

案例3:对对象进行排序

object Test {
def main(args: Array[String]): Unit = {
//创建配置文件
val conf: SparkConf = new SparkConf().setAppName("Spark01_Cache").setMaster("local[*]")
//创建SparkContext,该对象是提交的入口
val sc = new SparkContext(conf)
//创建RDD
val listStudent = List(Student("zs", 22), Student("li", 44), Student("li", 33))
val rdd: RDD[Student] = sc.makeRDD(listStudent)
// 按照name进行升序排序
val resRDD: RDD[Student] = rdd.sortBy(stu => (stu.name), true)
resRDD.collect().foreach(println)
// 按照name进行升序排序,name相同时,在按照age升序排序
println("****************")
val resRDD1: RDD[Student] = rdd.sortBy(stu => (stu.name, stu.age), true)
resRDD1.collect().foreach(println)
// 按照name进行升序排序,name相同时,在按照age降序排序(这种方式只有自定义排序规则了)
}
}

case class Student(name: String, age: Int)

​结果:​

Student(li,44)
Student(li,33)
Student(zs,22)
*************************
Student(li,33)
Student(li,44)
Student(zs,22)

结语:

​注意:​​sortBy在数据量特大的情况下,可能会OOM,建议使用sortByKey

​​Spark sortByKey​​