pyspark df 二次排序

文章目录

需求

根据两列排序,根据列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|
+-----------+---+------+

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/125144457
df
今日推荐