微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pyspark-用count分组数据并可能排序吗?

如何解决Pyspark-用count分组数据并可能排序吗?

我有一个以位置和性别作为字符串值的数据框,我想按降序查看按男性和女性计数划分的前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 |
+-------------------------+----+----+

解决方法

我没有得到想要精确排序的方式,是按fm列的总和还是按多列进行的。

  1. 总和:
pivotDF = pivotDF.orderBy((F.col('f') + F.col('m')).desc())
  1. 对于多列:
pivotDF = pivotDF.orderBy(F.col('f').desc(),F.col('m').desc())
,

您可以使用orderBy

orderBy(*cols,**kwargs)

返回按指定列排序的新DataFrame。

参数

cols –要作为排序依据的列或列名称的列表。

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

datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=False)

如果您希望一个上升而另一个下降,则可以执行以下操作。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。