You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pyspark的DataFrame中筛选出值最大的对应条目

PySpark 筛选DataFrame指定列最大值对应条目的实现方案

我们需要从PySpark DataFrame中筛选出数值列最大值对应的完整条目,参考示例数据如下:

IdentifiantVal
MAC2636
MAC109
MAC022
MAC3211
MAC0937
MAC2810

我们需要最终得到Val列最大值37对应的MAC09条目,以下是两种常用实现方式:

方法1:先取最大值再过滤

逻辑简单直观,适合小体量数据集:

  • 先计算Val列的全局最大值
  • 用最大值作为过滤条件筛选对应行
from pyspark.sql import functions as F

# 计算Val列最大值
max_value = df.select(F.max("Val")).first()[0]
# 过滤得到最大值对应的条目
result_df = df.filter(F.col("Val") == max_value)
# 输出结果
result_df.show()

输出结果:

+-----------+---+
|Identifiant|Val|
+-----------+---+
|      MAC09| 37|
+-----------+---+

方法2:窗口函数排序取值

适合大体量数据集,仅需扫描一次数据,同时支持多最大值的匹配场景:

  • 定义窗口按Val列降序排序
  • 给每行数据计算排名
  • 筛选排名为1的行即为最大值对应条目
from pyspark.sql import functions as F
from pyspark.sql.window import Window

# 定义排序窗口
window = Window.orderBy(F.col("Val").desc())
# 新增排名列
df_with_rank = df.withColumn("val_rank", F.rank().over(window))
# 筛选排名第一的条目,删除辅助排名列
result_df = df_with_rank.filter(F.col("val_rank") == 1).drop("val_rank")
# 输出结果
result_df.show()

如果确认仅存在一个最大值,可以将F.rank()替换为F.row_number()执行效率更高。

内容的提问来源于stack exchange,提问作者elokema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:36:01