如何在 Spark DataFrame 中获取具有最大值的行

How to get the rows with Max value in Spark DataFrame

我有一个包含以下详细信息的数据框 (df1)

| Date      |High|Low |
| --------  |----|----|
| 2021-01-23| 89 | 43 |
| 2021-02-09| 90 | 54 |
|2009-09-19 | 96 | 50 |

然后我将聚合函数应用到 High

df1.agg({'High':'max'}).show()

这会给我:

| max(High)|
| -------- |
|    96    |

我如何应用过滤器或其他方法,以便我可以获得与 max(High) 在同一行内的其他列与汇总结果一起显示?

我想要的结果是-

| Date     | High | Low  |
| -------- | ---- |------|
|2009-09-19| 96   | 50   |

您可以通过提取 MAX 高值并最终对整个 Dataframe

上的值应用 filter 来轻松完成

数据准备

df = pd.DataFrame({
        'Date':['2021-01-23','2021-02-09','2009-09-19'],
        'High':[89,90,96],
        'Low':[43,54,50]
})

sparkDF = sql.createDataFrame(df)

sparkDF.show()

+----------+----+---+
|      Date|High|Low|
+----------+----+---+
|2021-01-23|  89| 43|
|2021-02-09|  90| 54|
|2009-09-19|  96| 50|
+----------+----+---+

过滤器

max_high = sparkDF.select(F.max(F.col('High')).alias('High')).collect()[0]['High']

>>> 96

sparkDF.filter(F.col('High') == max_high).orderBy(F.col('Date').desc()).limit(1).show()

+----------+----+---+
|      Date|High|Low|
+----------+----+---+
|2009-09-19|  96| 50|
+----------+----+---+