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
相关产品推荐
相关产品推荐

