如何在PySpark中自动化统计DataFrame中各数值的重复次数
自动化统计DataFrame中指定范围内数值的重复次数
针对你的需求,完全可以通过Spark的分组聚合实现自动化统计,而且这种方法比逐个查询高效得多(尤其适合大型DataFrame,仅需扫描一次数据)。
步骤1:一次性统计所有数值的重复次数
使用groupBy按Count列分组,再用count()聚合统计每组的行数(即对应数值的重复次数):
from pyspark.sql.functions import count # 统计所有Count值的重复次数 count_df = df_right_table_23.groupBy("Count").agg(count("*").alias("重复次数")) # 查看结果 count_df.show()
执行后会得到类似结果:
+-----+--------+ |Count|重复次数| +-----+--------+ | 2| 2| | 3| 3| | 5| 3| | 6| 1| | 10| 2| | 15| 1| | 8| 1| | 4| 1| +-----+--------+
步骤2:过滤出2到100的数值范围
如果只需要统计2到100之间的数值,给结果DataFrame添加过滤条件即可:
# 过滤Count在[2, 100]区间内的记录 filtered_count_df = count_df.filter((count_df.Count >= 2) & (count_df.Count <= 100)) filtered_count_df.show()
可选:转换为字典方便查询
如果需要像手动查询那样快速获取单个数值的次数,可将结果转换成Python字典:
count_dict = {row["Count"]: row["重复次数"] for row in filtered_count_df.collect()} # 示例:查询数值2的重复次数 print(count_dict.get(2)) # 输出:2
为什么不推荐循环逐个查询?
对于大型DataFrame,循环执行where(...).count()会多次扫描整个数据集,性能极低;而分组聚合仅需扫描一次数据,效率提升非常明显。
内容的提问来源于stack exchange,提问作者lenpyspanacb
相关产品推荐
相关产品推荐

