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

PySpark数据集统计需求:获取计数及最频繁值(附示例DataFrame)

获取Spark DataFrame的记录计数与各字段最频繁值

没问题,我帮你搞定这个需求——既要拿到数据集的总记录数,又要找出每个字段的最频繁值。咱们一步步来实现:

1. 获取数据集总记录数

这一步很直接,用DataFrame的count()方法就能轻松搞定:

# 计算总记录数
total_records = test_df.count()
print(f"数据集总共有 {total_records} 条记录")

2. 获取各字段的最频繁值(众数)

这里有两种实用的方法,你可以根据自己的需求选择:

方法一:用Spark内置的mode()函数快速获取

Spark的functions.mode()可以直接返回字段的众数(最频繁出现的值),适合只需要结果的场景:

from pyspark.sql import functions as F

# 为每个字段生成mode计算表达式,并重命名结果列方便查看
mode_columns = [F.mode(col).alias(f"{col}_most_frequent") for col in test_df.columns]

# 执行计算并展示结果
most_frequent_values = test_df.select(*mode_columns)
most_frequent_values.show(truncate=False)

注意:如果某个字段有多个相同频次的众数,mode()会返回数据中最先出现的那个值。

方法二:手动分组统计,同时查看频次

如果你不仅需要最频繁值,还想看到每个值具体的出现次数,可以用分组计数的方式:

# 批量处理所有字段,输出每个字段的所有值及对应频次(按频次降序排列)
for column in test_df.columns:
    print(f"\n===== 字段 {column} 的频次统计 =====")
    test_df.groupBy(column) \
           .count() \
           .orderBy(F.desc("count")) \
           .show(truncate=False)

进阶:排除空值后的统计

你的示例数据里有不少None空值,如果不想把空值纳入统计范围,可以在分组前先过滤掉:

for column in test_df.columns:
    print(f"\n===== 字段 {column} 排除空值后的频次统计 =====")
    test_df.filter(F.col(column).isNotNull()) \
           .groupBy(column) \
           .count() \
           .orderBy(F.desc("count")) \
           .show(truncate=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:31