前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
本文总结如何将DataFrame按某列降序排序,因为Spark默认的排序方式为升序,而降序的用法和java语言等又不一样,所以需要特地总结记录一下其用法。
1、创建测试用DataFrame
1 | val data = Array((7, 2, 3), (1, 8, 6), (4, 5, 9)) |
1 | +----+----+----+ |
2、默认的升序排序效果(按col2排序,以下都是)
1 | df.orderBy("col2").show() |
1 | +----+----+----+ |
3、降序方法一
1 | df.orderBy(-df("col2")).show |
1 | +----+----+----+ |
这个方法在前面加上负号-即可,看起来挺简单的,但是其实这种方法不能在第一次构建df的时候进行排序,必须先创建好一个df,再用创建好的df生成新的df。
4、降序方法二
下面的方法和方法一是一样的1
df.orderBy(df("col2").desc).show
1 | +----+----+----+ |
5、降序方法三
1 | import org.apache.spark.sql.functions._ |
1 | +----+----+----+ |
这种方法是我比较喜欢的,因为在第一次创建的时候就可以排序了,且使用起来也很简洁。
可以使用下面的代码测试一下1
spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show
- 注:上面导入的包,在spark-shell里执行的时候是不需要的
6、降序方法四
下面的方法和方法三是一样的,由于结果一样,就不贴上了1
df.orderBy(-col("col2")).show
7、降序方法五
下面的方法和方法四是一样的,由于结果一样,就不贴上了1
df.orderBy(col("col2").desc).show
8、sort函数
sort函数和orderBy用法和结果是一样的,因为orderBy和sql语法里的order by名字一样,所以我首先想到这个方法,就把orderBy放在前面介绍了(sort比orderBy短一点哈~)1
df.sort(desc("col2")).show
附录
1 | package com.dkl.leanring.spark.df |