Spark DataFrame按某列降序排序
我的原创地址: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() } }
参考资料
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hadoop学习系列一:环境搭建
Hadoop学习系列一:环境搭建 为了学习HBase,跑过来先把Hadoop学习下。主要是根据马老师之前直播的教程来学习的。好了,废话不多说了,开搞。 一. 安装虚拟机 相比VMware,Vritual Box是免费的,因此这里采用Virtual Box。首先在virtualbox官网的下载页面下载Virtual Box,并安装。安装过程没什么好说的。 二. 在虚拟机里安装CentOS 在CentOS官网下载最新版的CentOS 7,下载的时候要DVD ISO,Minimal ISO文件虽然比较小,但不能满足我们的需求。 下载完成后,打开Virtual Box,点击“新建”,输入虚拟机的名称(我这里输入“node1”),类型选择“Linux”,因为这里下载的CentOS是64位版本,所有这里的版本要选择“Red Hat (64-bit)”,点击“下一步”。“内存大小”先设置1G,选择“下一步”。“虚拟硬盘”选择“现在创建虚拟硬盘”,点击“创建”。”虚拟硬盘文件类型“默认就好,选择“下一步”。”存储在物理硬盘上“选择“动态分配”,选择“下一步”。最后点击“创建”按钮,完成虚拟机“node...
- 下一篇
采集→清洗→处理:基于MapReduce的离线数据分析
一、大数据处理的常用方法 大数据处理目前比较流行的是两种方法,一种是离线处理,一种是在线处理,基本处理架构如下: 在互联网应用中,不管是哪一种处理方式,其基本的数据来源都是日志数据,例如对于Web应用来说,则可能是用户的访问日志、用户的点击日志等。 如果对于数据的分析结果在时间上有比较严格的要求,则可以采用在线处理的方式来对数据进行分析,如使用Spark、Storm等进行处理。比较贴切的一个例子是天猫双十一的成交额,在其展板上,我们看到交易额是实时动态进行更新的,对于这种情况,则需要采用在线处理。 当然,如果只是希望得到数据的分析结果,对处理的时间要求不严格,就可以采用离线处理的方式,比如我们可以先将日志数据采集到HDFS中,之后再进一步使用MapReduce、Hive等来对数据进行分析,这也是可行的。 本文主要分享对某个电商网站产生的用户访问日志(access.log)进行离线处理与分析的过程,基于MapReduce的处理方式,最后会统计出某一天不同省份访问该网站的UV与PV。 二、生产场景与需求 在我们的场景中,Web应用的部署是如下的架构: 即比较典型的Nginx负载均衡+Kee...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)