如何在 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|
+----------+----+---+
我有一个包含以下详细信息的数据框 (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|
+----------+----+---+