Pyspark - 使用 count() 分组数据并可以排序?
Posted
技术标签:
【中文标题】Pyspark - 使用 count() 分组数据并可以排序?【英文标题】:Pyspark - grouped data with count() and sorting possible? 【发布时间】:2020-10-08 08:26:13 【问题描述】:我有一个数据框,其中位置和性别作为字符串值,我想按降序查看男性和女性计数拆分的前 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 |
|***lyn, new york |1 |2 |
|utica, michigan |null|1 |
|burlingame, california |154 |207 |
+-------------------------+----+----+
【问题讨论】:
【参考方案1】:您可以使用orderBy
orderBy(*cols, **kwargs)
返回按指定列排序的新 DataFrame。
参数
cols – 要排序的列或列名列表。
升序 – 布尔值或布尔值列表(默认为 True)。升序与降序排序。指定多个排序顺序的列表。如果一个 指定了列表,列表的长度必须等于列的长度。
datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=False)
如果您想要一个升序而另一个降序,您可以这样做。
datingDF.groupBy("location").pivot("sex").count().orderBy("F","M",ascending=[1,0])
【讨论】:
【参考方案2】:我不知道您希望如何排序,按 f
和 m
列的总和或按多列。
-
总和:
pivotDF = pivotDF.orderBy((F.col('f') + F.col('m')).desc())
-
对于多列:
pivotDF = pivotDF.orderBy(F.col('f').desc(), F.col('m').desc())
【讨论】:
以上是关于Pyspark - 使用 count() 分组数据并可以排序?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyspark 数据框中的复制名称加入后使用左表中的所有列进行分组