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

PySpark中greatest函数的逆函数:多列最小值获取方法咨询

PySpark中获取多列最小值的方法

嘿,你问的这个问题刚好有明确的答案:pyspark.sql.functions里的greatest()确实有对应的逆函数——就是least()!它的作用和greatest()完全对应:前者取多列的最大值,后者直接返回多列中的最小值。

举个实际的例子来演示怎么用:

from pyspark.sql import SparkSession
import pyspark.sql.functions as F

# 初始化SparkSession并创建测试DataFrame
spark = SparkSession.builder.appName("min_columns_example").getOrCreate()
sample_data = [(3, 1, 4), (5, 2, 6), (None, 7, 0)]
df = spark.createDataFrame(sample_data, ["a", "b", "c"])

# 使用least()获取三列的最小值
df.withColumn("min_val", F.least("a", "b", "c")).show()

运行后输出会是:

+----+---+---+-------+
|   a|  b|  c|min_val|
+----+---+---+-------+
|   3|  1|  4|      1|
|   5|  2|  6|      2|
|null|  7|  0|   null|
+----+---+---+-------+

这里要注意,和greatest()一样,least()只要传入的列里有null,结果就会返回null。如果需要忽略null,可以结合coalesce先处理空值,或者用下面要说的另一种方法。

要是你因为某些原因不想用least()(比如旧版本兼容性?不过least()在PySpark 2.0+就支持了),除了写UDF之外,还有个灵活的替代方案:把目标列打包成数组,再用array_min()函数取数组里的最小值。

还是用上面的例子,这种方法的代码是:

df.withColumn("min_val", F.array_min(F.array("a", "b", "c"))).show()

这个方法的优势是更容易处理null场景,比如我们想忽略空值只计算非空列的最小值,可以这么写:

df.withColumn("filtered_array", F.array_except(F.array("a", "b", "c"), F.array(F.lit(None))))
  .withColumn("min_val", F.when(F.size("filtered_array") > 0, F.array_min("filtered_array")).otherwise(None))
  .show()

这样就能得到忽略null后的最小值了。

总结一下两种核心方法:

  • 优先用least(),它是greatest()的官方逆函数,用法简洁直接;
  • 数组+array_min()的方式,灵活性更强,适合需要自定义处理空值或复杂列组合的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:03:46