遇到这样的场景,有一个文本里的字段是:日期,名字,数据。需要对名字和日期进行排序,大概的思路就是先将名字排序(其实准确来说是分组),再将日期排序。可以使用下面的方案。
文本
60 53
70 58
20 21
50 51
50 54
60 51
代码
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object TwoSort {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("twosort").setMaster("local")
val sc = new SparkContext(conf)
val file = sc.textFile("file:///d:/test_data/twosort.txt")
//排序并二次排序
val rdd_group = file.map(line => line.split(" ")).map(x => (x(0),x(1))).groupByKey()
var rdd = rdd_group.sortByKey(true).map(x => (x._1, x._2.toList.sortWith(_>_)))
//按照二元组格式输出
val rdd2=rdd.flatMap{
x =>
val len=x._2.length
val arr=new Array[(String,String)](len)
for(i <- 0 until len){
arr(i)=(x._1,x._2(i))
}
arr
}
rdd2.foreach(println)
sc.stop()
}
}
结果
(20,21)
(50,54)
(50,51)
(60,53)
(60,51)
(70,58)