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

如何从Spark DataFrame的数组列中提取各数组的最小值?

提取Spark DataFrame数组列的最小值

没问题,我来帮你搞定这个需求。你的数组里包含空字符串(比如第一个元素是空值),直接求最小值会出问题,得先清理这些无效值再计算。这里有个可以直接运行的解决方案:

import org.apache.spark.sql.functions.{array_min, transform, col, trim}

// 处理数组并提取最小值
val resultDF = DF
  .withColumn("complete1", 
    array_min(transform(col("complete1"), x => trim(x).cast("int")).filter(_.isNotNull))
  )
  .withColumn("complete2", 
    array_min(transform(col("complete2"), x => trim(x).cast("int")).filter(_.isNotNull))
  )

分步拆解逻辑:

  1. 清理+类型转换:用transform遍历数组每个元素,先通过trim()去除可能的空格(虽然你的例子里是空字符串,但这个操作更通用),再把元素转成整数类型——空字符串转整数会得到null。
  2. 过滤无效值:用filter(_.isNotNull)把转换后产生的null过滤掉,只保留有效的数字元素。
  3. 计算最小值:用array_min()对处理后的数组求最小值,这个函数会正确返回数组中的最小整数。

运行这段代码后,你会得到完全符合预期的结果:
|id |complete1|complete2|
+---+---------+---------+
|123|1 |3 |
|124|2 |3 |

补充:处理全空数组的特殊情况

如果你的数据里存在某个数组全是空字符串的情况,处理后会变成空数组,array_min()会返回null。如果需要给这种情况设置默认值,可以用coalesce()调整,比如:

coalesce(array_min(...), lit(0)) // 把null替换成0,你可以改成自己需要的默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:26