一.Spark 二次排序:
当排序的过程中,假如按照key排序使用sortByKey算子的时候,经常有很多key相同的数据,但是我们需要再次根据其他指标将相同key的数据再次细致的进行第二次的排序,这个时候我们就需要用到二次排序。并且很多场景需要三次排序,四次排序,五次甚至更多次的排序。
二.案例:要求先按账户排序,在按金额排序
数据如下:
hadoop@apache 200
hive@apache 550
yarn@apache 580
hive@apache 159
hadoop@apache 300
hive@apache 258
hadoop@apache 150
yarn@apache 560
yarn@apache 260
spark代码:
import org.apache.spark.{SparkConf, SparkContext} object secondarySort { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("secondarySort").setMaster("local") val sc = new SparkContext(conf) val rdd = sc.textFile("D://wc//erci//paixu.txt") val result = rdd.map(x => x.replaceAll("\\s+"," ").split(" ")) .map(x => (x(0),x(1))) result.repartition(1).groupByKey() .mapValues(x => x.toList.sortBy(x => x)) .sortByKey() .saveAsTextFile("D://wc//ercipaixuResult2") } }
运行结果:
(hadoop@apache,List(150, 200, 300))
(hive@apache,List(159, 258, 550))
(yarn@apache,List(260, 560, 580))