当前位置:网站首页>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|
+-----------+---+------+
边栏推荐
猜你喜欢
随机推荐
process.env环境变量配置方式(配置环境变量区分开发环境和生产环境)
PostMan测试接口-----上传文件、导出excel
如何使用md5码验证文件的一致性
MySQL的on duplicate key update 的使用
xshell报错-要继续使用此程序,您必须应用最新的更新或使用新版本
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
Oracle 11g静默安装
C#通过WebBrowser对网页截图
【GIoU loss】GIoU loss损失函数理解
Chrome插件开发入门
使用Contab调用Shell脚本执行expdp自动备份Oracle
Zabbix历史数据清理(保留以往每个项目每天一条数据)
MySQL的10种常用数据类型
阿里云短信服务的使用(创建,测试笔记)
PCB板上的字母代表哪些元器件?一文看全!
JDBC从手写连接到引用DBCP和C3P0
Prometheus监控容器、pod、邮件告警
MySQL之concat的用法
【EA Price strategy OC1】以实时价格为依据的EA,首月翻仓!】
el-table获取读取数据表中某一行的数据属性









