如何使用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
相关产品推荐
相关产品推荐

