Spark sortBy
原创
©著作权归作者所有:来自51CTO博客作者塞上江南o的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
- 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