当前位置:网站首页>pyspark df 二次排序
pyspark df 二次排序
2022-08-03 05:29:00 【WGS.】
需求
根据两列排序,根据列1降序,当列1相同时根据列2降序
假数据
di = [{
'suuid': 'DONEW', 'oaid': '000-12','y': 1},
{
'suuid': 'DONEW', 'oaid': '000-12','y': 0},
{
'suuid': 'WONF', 'oaid': '111-12','y': 0},
{
'suuid': 'O000-2FJA01', 'oaid': '111-12','y': 1},
{
'suuid': 'F1NS', 'oaid': '111-12','y': 0},
{
'suuid': 'F1NS', 'oaid': '111-12','y': 0},
{
'suuid': 'F1NS', 'oaid': '111-12','y': 1},
{
'suuid': 'WONF', 'oaid': '000-12','y': 0}]
df = ss.createDataFrame(di)
df.show()
+------+-----------+---+
| oaid| suuid| y|
+------+-----------+---+
|000-12| DONEW| 1|
|000-12| DONEW| 0|
|111-12| WONF| 0|
|111-12|O000-2FJA01| 1|
|111-12| F1NS| 0|
|111-12| F1NS| 0|
|111-12| F1NS| 1|
|000-12| WONF| 0|
+------+-----------+---+
实现
- ascending:传入列表的时候,
0代表降序、1代表升序

def row_count(row):
suuid, y = row[0], row[1]
clicks = sum(y)
pvs = len(y) - clicks
return suuid, pvs, clicks
dfsuuid = df.groupBy('suuid').agg(fn.collect_list('y').alias('y'))\
.rdd.map(row_count).toDF(schema=['suuid', 'pvs', 'clicks'])
dfsuuid.show()
# pvs降序、clicks降序
dfsuuid.orderBy(['pvs', 'clicks'], ascending=[0, 0]).show()
+-----------+---+------+
| suuid|pvs|clicks|
+-----------+---+------+
| F1NS| 2| 1|
|O000-2FJA01| 0| 1|
| WONF| 2| 0|
| DONEW| 1| 1|
+-----------+---+------+
+-----------+---+------+
| suuid|pvs|clicks|
+-----------+---+------+
| F1NS| 2| 1|
| WONF| 2| 0|
| DONEW| 1| 1|
|O000-2FJA01| 0| 1|
+-----------+---+------+
验证0为降序、1为升序
dfsuuid.orderBy(['pvs', 'clicks'], ascending=[1, 0]).show()
dfsuuid.orderBy(['pvs', 'clicks'], ascending=[1, 1]).show()
+-----------+---+------+
| suuid|pvs|clicks|
+-----------+---+------+
|O000-2FJA01| 0| 1|
| DONEW| 1| 1|
| F1NS| 2| 1|
| WONF| 2| 0|
+-----------+---+------+
+-----------+---+------+
| suuid|pvs|clicks|
+-----------+---+------+
|O000-2FJA01| 0| 1|
| DONEW| 1| 1|
| WONF| 2| 0|
| F1NS| 2| 1|
+-----------+---+------+
边栏推荐
- torch.nn.modules.activation.ReLU is not a Module subclass
- 【云原生 · Kubernetes】Kubernetes简介及基本组件
- el-table实现列筛选功能,控制列的显示和隐藏(实现简单,效果满分)
- VS Project Configuration Manager
- process.env环境变量配置方式(配置环境变量区分开发环境和生产环境)
- postman配置中文
- MySQL master-slave replication
- HDI与普通PCB的4点主要区别
- prometheus 监控mysql数据库
- 【云原生 · Kubernetes】搭建Harbor仓库
猜你喜欢
随机推荐
UniApp 自定义条件编译详细使用流程
Podman一篇就学会
el-tree设置选中高亮焦点高亮、选中的节点加深背景,更改字体颜色等
2021-06-20
AQS、CAS、Synchronized小理解
JUC并发编程深入浅出!
MySQL 操作语句大全(详细)
Shell脚本--信号发送与捕捉
MySQL的10种常用数据类型
【地平线 开发板】实现模型转换并在地平线开发板上部署的全过程操作记录(魔改开发包)
【nohup】nohup命令的简单使用
UniApp 获取当前页面标题(navigationBarTitleText)
SVN客户端安装及操作文档
Redis-记一次docker下使用redis
TFS(Azure DevOps)禁止多人同时签出
流式低代码编程,拖拽节点画流程图并运行
使用Powershell批量导入Task
记一次postgresql中使用正则表达式
MySQL中,对结果或条件进行字符串拼接
el-tree设置利用setCheckedNodessetCheckedKeys默认勾选节点,以及通过setChecked新增勾选指定节点









