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

如何用Spark SQL/DataFrame实现Pandas nunique 单句查询全列唯一值计数

Spark 实现全列唯一值计数(对标Pandas nunique)

实现方案

方式1:DataFrame API 实现

无需手动逐个指定列名,动态遍历所有字段生成聚合逻辑:

import org.apache.spark.sql.functions.countDistinct

// 单条agg语句完成全列唯一值计数
val nuniqueResult = df.agg(
  df.columns.map(colName => countDistinct(colName).alias(s"nunique_${colName}")): _*
)

// 输出结果
nuniqueResult.show(false)

方式2:纯Spark SQL 实现

先注册临时视图后,动态拼接SQL语句执行:

// 注册数据为临时视图
df.createOrReplaceTempView("youtube_videos")

// 生成并执行单条查询SQL
val nuniqueSql = s"""
  SELECT ${df.columns.map(col => s"COUNT(DISTINCT ${col}) AS nunique_${col}").mkString(", ")}
  FROM youtube_videos
"""
val nuniqueResult = spark.sql(nuniqueSql)

// 输出结果
nuniqueResult.show(false)

可选优化

如果你的数据量很大,可接受近似计数结果,可以把countDistinct替换为approx_count_distinct,能大幅提升计算性能,误差通常在2%以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:05