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

如何使用Spark Scala获取DataFrame列的众数?代码无法运行求助

Spark Scala 获取DataFrame列众数的正确写法

原代码存在两个核心问题:

  • orderBy("count")默认是升序排序,调用first()会拿到出现次数最少的类别,而非众数
  • 若DataFrame为空,first()会抛出NoSuchElementException,缺乏空值处理

修正后的基础版代码(获取单个众数)

先导入排序所需的函数:

import org.apache.spark.sql.functions.desc

然后执行众数计算:

val typeModeRow = dfairports.groupBy("type").count().orderBy(desc("count")).first()
// 安全提取众数值,避免空指针
val modeValue = if (typeModeRow != null) typeModeRow.getAs[String]("type") else "无可用数据"
println("众数: " + modeValue)

进阶版:处理多个众数的情况

如果存在多个出现次数相同的众数,可通过以下代码获取所有众数:

import org.apache.spark.sql.functions.{desc, max}

// 先获取最大出现次数
val maxCount = dfairports.groupBy("type").count().agg(max("count")).first().getLong(0)
// 筛选出所有出现次数等于最大值的类别
val allModes = dfairports.groupBy("type").count()
  .filter(s"count = $maxCount")
  .select("type")
  .collect()
  .map(_.getAs[String]("type"))

println("所有众数: " + allModes.mkString(", "))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:06:02