Spark Python按Country分组聚合查询比利时平均Qty实现方法
PySpark 实现方案
完全可以实现,以下是两种常用实现方式:
- 方式一:先按国家分组计算所有国家平均值,再过滤出比利时结果
适合需要同时获取多个国家平均值的场景,代码示例:
# 分组聚合计算每个国家的平均Qty avg_df = df.groupBy("Country").agg(F.avg("Qty").alias("avg_qty")) # 过滤获取比利时的平均值 belgium_avg = avg_df.filter(F.col("Country") == "Belgium").collect()[0]["avg_qty"] print(belgium_avg)
- 方式二:先过滤出比利时数据再聚合计算
适合仅需要比利时平均值的场景,数据量越大效率优势越明显,避免处理无关国家的数据,代码示例:
belgium_avg = df.filter(F.col("Country") == "Belgium") \ .agg(F.avg("Qty").alias("avg_qty")) \ .collect()[0][0] print(belgium_avg)
注意事项
- 运行代码前需要先导入PySpark函数模块:
from pyspark.sql import functions as F - 若
Qty列为字符串类型,需要先转换为数值类型再计算,否则聚合结果会为null:
df = df.withColumn("Qty", F.col("Qty").cast("integer"))
- 按你提供的样本数据计算,比利时最终的平均Qty结果为
43.0
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

