package date_20250415

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

/** Spark二次排序程序 */
object RDDSecondarySort {

    def main(args: Array[String]): Unit = {

        // 创建SparkConf对象，存储应用程序的配置信息
        val conf = new SparkConf()
          .setMaster("local") // 启动本地化计算
          .setAppName("Spark-SecondarySort") // 设置应用程序名称

        // 创建SparkContext对象
        val sc = new SparkContext(conf)

        // 读取指定路径中的文件内容，生成一个RDD集合
        val linesRDD: RDD[String] = sc.textFile("hdfs://hadoop102:8020/input/data/sort_data.txt")

        // 将每一行数据转化为 (第一列, 第二列) 二元组
        val tupleRDD: RDD[(Int, Int)] = linesRDD.map(line => {
            val Array(col1, col2) = line.split(" ").map(_.toInt)
            (col1, col2)
        })

        // 进行二次排序，首先按第一列升序，如果第一列相同，按第二列降序
        val sortedRDD: RDD[(Int, Int)] = tupleRDD.sortBy(x => (x._1, -x._2))

        // 保存排序结果到HDFS
        sortedRDD.saveAsTextFile("hdfs://hadoop102:8020/output/secondarySort")

        // 打印排序后的结果
        sortedRDD.collect().foreach(x => println(x._1 + " " + x._2))

        // 停止SparkContext
        sc.stop()
    }
}