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

如何统计PySpark DataFrame中某列各分类变量的出现频次?

统计PySpark DataFrame分类列的出现频次

嘿,这个需求在PySpark里其实很好实现,我给你两种常用的方法,都很容易上手:

首先先还原你的DataFrame(方便后续测试):

from pyspark.sql import SparkSession

# 初始化SparkSession
spark = SparkSession.builder.appName("category_count").getOrCreate()

# 构造数据
data = [("alpha", 1), ("beta", 2), ("gamma", 1), ("alpha", 2)]
df = spark.createDataFrame(data, ["x", "y"])

# 查看原始数据
df.show()

运行后会得到你给出的结果:

+-----+---+
|  x  | y |
+-----+---+
|alpha| 1 |
|beta | 2 |
|gamma| 1 |
|alpha| 2 |
+-----+---+

方法一:经典分组聚合(兼容所有Spark版本)

这是最通用的方式,用groupBy()对x列分组,再配合count()统计每组的行数:

from pyspark.sql.functions import count

# 分组并统计频次,给结果列起个直观的名字
count_result = df.groupBy("x").agg(count("*").alias("occurrence_count"))

# 查看统计结果
count_result.show()

输出结果:

+-----+----------------+
|    x|occurrence_count|
+-----+----------------+
|alpha|               2|
| beta|               1|
|gamma|               1|
+-----+----------------+

这里count("*")可以替换成count("y")或者count(lit(1)),效果完全一致;alias()是为了让统计列的名字更易懂,你也可以改成自己喜欢的名称。

方法二:简洁的value_counts()(Spark 3.0+适用)

如果你用的是Spark 3.0及以上版本,还可以用更简洁的API直接统计:

# 选择x列后调用value_counts,一步到位
count_result = df.select("x").value_counts()

# 查看结果
count_result.show()

输出结果:

+-----+-----+
|    x|count|
+-----+-----+
|alpha|    2|
| beta|    1|
|gamma|    1|
+-----+-----+

默认的统计列名是count,如果需要改名,直接用withColumnRenamed("count", "occurrence_count")即可。

可选:对结果排序

如果需要按频次高低排序,只需要在结果后加上orderBy():

# 方法一的排序示例(按频次降序)
count_result.orderBy("occurrence_count", ascending=False).show()

# 方法二的排序示例
count_result.orderBy("count", ascending=False).show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:56