Spark 三次排序

Spark 三次排序

<pre name="code" class="java">package com.dtspark

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

/**
  * 三次排序,具體實現步驟
  * 第一步:按照Ordered和Seriallizable接口實現自定義排序的Key
  * 第二部:將要進行三次排序的文件加載進來進行<Key,Value>類型的RDD
  * 第三部:使用sortByKey基於自定義的Key進行三次排序
  * 第四部:去除掉排序的Key,只保留排序的結果
  * Created by huangle on 2016/9/30.
  */

class ThirdSortKey(val first: Int, val second: Int, val third: Int) extends Ordered[ThirdSortKey] with Serializable{
	def compare(other: ThirdSortKey): Int = {
		if(this.first - other.first != 0){
			this.first - other.first
		}else{
			if(this.second - other.second != 0){
				this.second - other.second
			}else{
				this.third - other.third
			}
			
		}
	}
}

object SecondarySortKeyApp {
	def main(args: Array[String]): Unit = {
		val sc = sparkContext("Secondary Sort")   //創建SparkContext
		val lines = sc.textFile("E://SOFTLEARN//BOOKDATA//dataset//1test.txt", 1)
		val pairWithSortKey = lines.map(line => (
			new ThirdSortKey(line.split(" ")(0).toInt, line.split(" ")(1).toInt, line.split(" ")(2).toInt), line
		  ))

		val sorted = pairWithSortKey.sortByKey(true)
		sorted.collect().foreach(println)
		val sortedResult = sorted.map(sortedLine => sortedLine._2)
		sortedResult.collect().foreach(println)
	}
	
	//初始化程序配置
	def sparkContext(name: String)={
		val conf = new SparkConf().setAppName(name).setMaster("local")
		val sc = new SparkContext(conf)
		sc.setLogLevel("WARN")
		sc
	}
}





發佈了46 篇原創文章 · 獲贊 10 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章