前言
前面的文章我们已经使用了很多次sort方法进行排序了,但是如何通过两个字段排序呢?即如果第一个字段的值相同,如何通过另外一个字段排序呢?下面我们将通过一个demo演示如何实现。
Spark Scala多字段二次排序
1 | 本地文件(hdfs文件)内容,即第一列为姓名,第二列为分数,第三列为年龄 |
- MoreSortKey:Scala通过继承Ordered实现Serializable的方式实现排序功能,输入两个字段(也可以多更多的字段实现排序)
- textFile:通过SparkContext的textFile函数加载本地源文件
- map:还是通过map函数转换sort需要的数据结构,相当于转换的数据还是(key,value),因为后续的sort是需要依赖key的,只是此处的key为MoreSortKey对象,而value则是原值。此处先获取到每一行,然后组装MoreSortKey对象
- sortByKey:根据key排序,但是此处的排序规则是自定义的
- map:获取需要的数据,即从元组里面取第二个(原始行数据)
- collect:最后收集然后再调用println函数标准输出
1 | package lishijia.spark.demo.sort |
1 | package lishijia.spark.demo.sort |
总结
即通过自定义排序规则实现多列的排序,这么几个示例下来。发现当中的这些函数就是在做数据的不停转换,为下一步的数据转换做准备,即spark的初级使用方法就是需要把这些函数灵活转换使用,多练习即可。
代码:https://github.com/lishijia/spark-scala-demo/tree/master/src/main/scala/lishijia/spark/demo