开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:有类型转换_orderBy】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12072
有类型转换_orderBy
了解排序,因为我们经常需要对数据集进行排序,这是一个基础功能。那么排序相关联的这个算子有两个,一个叫做 olderBY。还有一个叫做 sort,好,这两个算子,其实也是同一个算子,olderBY 的底层是 sort。
接下来就进入到 idea 中,创建出来一个方法命名为 sort。
def sort(): Unit = {
val ds= Seq(Person(“zhangsan”,12),
Person(“zhangsan”,8),Person(“list”,15)).toDS()
//里面存放三个 person 对象
ds .orderBy( ‘age,desc).show()
//使用 orderBy 进行排序 ,两种方式传入列名,第一种方式直接传入 name 这一列:sortCol =”name”,因为这个 person 对象当中是有 scala 信息。其中有一个列叫做 name,有一个列叫做 age。第一种方式,其实也经常用,但是没有那么方便。
第二种方式,就是使用单引号:ds .orderBy( sortCol =‘name’
然后呢,可以去选中内容啊,当然要使用这个单引号来去选中一个列的时候,就必须要去导入隐式转换。这样 orderBy 就讲完了。
大家有没有想一个问题,这个 orderBy 现在按照 name 这一列进行排序的时候,它是升序还是降序?怎么去指定?
我们可以点进去 orderBy 看一下这个,那么这时候发现 order by,除了这个方法以外,往上走一走,还有一个重载方法,那里头传的是 sortCol。还有一个传的是表达式 Column 对象,比如使用那个那个单引号获得的对象,其实就是一个 Column 对象。
如果是这样的话,那大家有发现在哪里传排序规则了吗?就是怎么传它是升序还是降序。这时候回到代码当中,在代码当中可以看到这个单引号 name 其实是一个 column 对象,这个 Column 对象本身有一个这个属性叫做 asc,asc 代表的是升序,但是在升序排列的时候,我们可以指定,假如说有空值的话,这个空值应该在前还是应该在后。另一种也可以用 desc,当然也可以指定空值排在前还是排在后,那这是我们的两种排序方式。
ds.sort( ‘age.asc).show()
//接下来,除了 orderBy 以外,Dataset 当中还有一个方法叫做 sort 方法,和 orderBy 的方法调用规则是完全一模一样的。
输入 asc.设置为升序,name 是字符串,虽然它也可以排序,并不是特别方便,所以还是使用 age(ds.sort( ‘name.asc)改为 ds.sort( ‘age.asc))。
这个地方也可以进行一个 show,那这个时候就可能会有疑惑,那么为什么又有一个 orderBy,又有一个 sort?
是因为在这个 SQL 语句当中,是不是经常写什么 select*from....orderBy...asc,这个时候都注意到,那么这个 order by 是 scala 当中的 order by,现在搞的 Spark scala,有这个有类型的,有无类型的算子,那么我们这个地方 orderBy( ‘age,desc),其实就是为了配合 SQL 语句。
运行一下代码:
运行出结果完了,第一个结果按照降序排列的,第二个结果按照升序进行排列的,这就是排序的结果。
以上就是有类型转换_orderBy 的讲解。