Pyspark-是否可以使用count()和排序对数据进行分组?

Pyspark-是否可以使用count()和排序对数据进行分组?,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有一个以位置和性别作为字符串值的数据框,我想看看前20个位置的男女计数按降序排列。这是我到目前为止的代码,但它没有在desc中排序。我如何才能做到这一点 display(Markdown("**Top 20 locations** with highest active users split by sex ratio (in \%):")) pivotDF = datingDF.groupBy("location").pivot("sex&

我有一个以位置和性别作为字符串值的数据框,我想看看前20个位置的男女计数按降序排列。这是我到目前为止的代码,但它没有在desc中排序。我如何才能做到这一点

display(Markdown("**Top 20 locations** with highest active users split by sex ratio (in \%):"))

pivotDF = datingDF.groupBy("location").pivot("sex"). count()
pivotDF.show(truncate=False)

+-------------------------+----+----+
|location                 |f   |m   |
+-------------------------+----+----+
|mill valley, california  |176 |139 |
|london, united kingdom   |null|1   |
|west oakland, california |3   |4   |
|freedom, california      |1   |null|
|columbus, ohio           |null|1   |
|rochester, michigan      |1   |null|
|mountain view, california|106 |278 |
|magalia, california      |null|1   |
|san rafael, california   |340 |415 |
|nicasio, california      |1   |2   |
|santa cruz, california   |null|5   |
|moss beach, california   |3   |5   |
|muir beach, california   |null|1   |
|larkspur, california     |35  |45  |
|san quentin, california  |1   |1   |
|kentfield, california    |7   |11  |
|montara, california      |9   |3   |
|brooklyn, new york       |1   |2   |
|utica, michigan          |null|1   |
|burlingame, california   |154 |207 |
+-------------------------+----+----+

我不知道您要按
f
m
列之和或按多个列进行排序

  • 总额:
  • 对于多列:
  • 你可以用

    orderBy(*cols,**kwargs)

    返回按指定列排序的新数据帧

    参数

    cols–要排序的列或列名列表

    升序–布尔值或布尔值列表(默认为True)。升序与降序排序。为多个排序顺序指定列表。如果 如果指定了列表,则列表的长度必须等于cols的长度

    如果你想要一个上升,另一个下降,你可以这样做

    datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=[1,0])
    

    谢谢你的编辑
    pivotDF = pivotDF.orderBy(F.col('f').desc(), F.col('m').desc())
    
    datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=False)
    
    datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=[1,0])