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】:

我不知道您希望如何排序,按 fm 列的总和或按多列。

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

【讨论】:

以上是关于Pyspark - 使用 count() 分组数据并可以排序?的主要内容,如果未能解决你的问题,请参考以下文章

(pySpark 中分组数据的模式

如何在pyspark数据框中找到没有分组的累积频率

使用 pyspark 数据框中的复制名称加入后使用左表中的所有列进行分组

如何在 PySpark 中使用自定义行分组来 reduceByKey?

pyspark - 分组和计算数据

Pyspark 分组和结构化数据