您现在的位置是:首页 > 文章详情

Spark DataFrame按某列降序排序

日期:2018-07-07点击:502
版权声明:本文由董可伦首发于https://dongkelun.com,非商业转载请注明作者及原创出处。商业转载请联系作者本人。 https://blog.csdn.net/dkl12/article/details/80961981

我的原创地址:https://dongkelun.com/2018/07/04/sparkDfSortDesc/

前言

本文总结如何将DataFrame按某列降序排序,因为Spark默认的排序方式为升序,而降序的用法和java语言等又不一样,所以需要特地总结记录一下其用法。

1、创建测试用DataFrame

val data = Array((7, 2, 3), (1, 8, 6), (4, 5, 9)) val df = spark.createDataFrame(data).toDF("col1", "col2", "col3") df.show()
+----+----+----+ |col1|col2|col3| +----+----+----+ | 7| 2| 3| | 1| 8| 6| | 4| 5| 9| +----+----+----+

2、默认的升序排序效果(按col2排序,以下都是)

df.orderBy("col2").show()
+----+----+----+ |col1|col2|col3| +----+----+----+ | 7| 2| 3| | 4| 5| 9| | 1| 8| 6| +----+----+----+

3、降序方法一

df.orderBy(-df("col2")).show
+----+----+----+ |col1|col2|col3| +----+----+----+ | 1| 8| 6| | 4| 5| 9| | 7| 2| 3| +----+----+----+

这个方法在前面加上负号-即可,看起来挺简单的,但是其实这种方法不能在第一次构建df的时候进行排序,必须先创建好一个df,再用创建好的df生成新的df。

4、降序方法二

下面的方法和方法一是一样的

df.orderBy(df("col2").desc).show
+----+----+----+ |col1|col2|col3| +----+----+----+ | 1| 8| 6| | 4| 5| 9| | 7| 2| 3| +----+----+----+

5、降序方法三

import org.apache.spark.sql.functions._ df.orderBy(desc("col2")).show
+----+----+----+ |col1|col2|col3| +----+----+----+ | 1| 8| 6| | 4| 5| 9| | 7| 2| 3| +----+----+----+

这种方法是我比较喜欢的,因为在第一次创建的时候就可以排序了,且使用起来也很简洁。
可以使用下面的代码测试一下

spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show
  • 注:上面导入的包,在spark-shell里执行的时候是不需要的

6、降序方法四

下面的方法和方法三是一样的,由于结果一样,就不贴上了

df.orderBy(-col("col2")).show 

7、降序方法五

下面的方法和方法四是一样的,由于结果一样,就不贴上了

df.orderBy(col("col2").desc).show

8、sort函数

sort函数和orderBy用法和结果是一样的,因为orderBy和sql语法里的order by名字一样,所以我首先想到这个方法,就把orderBy放在前面介绍了(sort比orderBy短一点哈~)

df.sort(desc("col2")).show

附录

package com.dkl.leanring.spark.df import org.apache.spark.sql.SparkSession object DfSortDesc { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("DfSortDesc").master("local").getOrCreate() val data = Array((7, 2, 3), (1, 8, 6), (4, 5, 9)) val df = spark.createDataFrame(data).toDF("col1", "col2", "col3") //打印 df df.show() // 默认的升序 df.orderBy("col2").show() //降序方法一 df.orderBy(-df("col2")).show //降序方法二同上 df.orderBy(df("col2").desc).show import org.apache.spark.sql.functions._ //降序方法三 df.orderBy(desc("col2")).show //测试方法三 spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show //降序方法四 df.orderBy(-col("col2")).show //降序方法五 df.orderBy(col("col2").desc).show //sort函数和orderBy用法和结果是一样的 df.sort(desc("col2")).show spark.stop() } }

参考资料

Spark-SQL之DataFrame操作大全
在Apache Spark 2.0中使用DataFrames和SQL

原文链接:https://yq.aliyun.com/articles/676188
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章