前年的文章,备份
spark自身不提供sortByKey的功能,但提供reduceByKey,groupByKey,combineByKey等功能。
SortByKey常用于构建倒排索引上。
比如原始数据结构为
(key1,4)
(key1,3)
(key1,7)
(key1,1)
需要转换成
(key1,(1,3,4,7))
我创建了一个简单的数据样本,保存到一个文件里sortByKey.txt。也可以自己通过parallelize随机生成
文件里的内容如下:
key1 2
key1 3
key2 54
key1 23
key2 12
key3 45
key3 5
key1 53
key2 4
key3 78
key3 17
key2 6
key1 70
key1 74
key2 45
key1 41
key2 14
使用spark完成这样的任务也很简单,代码如下:
import spark.SparkContext import spark.SparkContext._ object SortByKey { def main(args: Array[String]) { if (args.length == 0) { System.err.println("Usage: SortByKey [slices]") System.exit(1) } var slices = if (args.length > 2) args(1).toInt else 2 val spark = new SparkContext(args(0), "SortByKey Test") val file = spark.textFile(args(1), slices).map(line => (line.split(" ")(0), line.split(" ")(1).toInt)) val group = file.groupByKey()//收集 val sortPairs = group.map{p => val sortArray = p._2.sortWith(_ < _)//排序 (p._1, sortArray) } //验证排序效果 val first = sortPairs.first() println("key:"+first._1) println("value:"+first._2) first._2.foreach(println) } }