如何在PySpark中计算各宝可梦类型的平均出现概率?
解决宝可梦类型数组的平均出现概率统计问题
问题核心是原代码按整个类型数组分组,导致统计结果是类型组合的平均值,而非单个类型的统计数据。解决思路是先将数组拆分为单个类型的行,再进行分组统计:
1. 拆分类型数组为单行单类型
使用Spark的explode函数,将type列的数组元素拆分为独立行,每个类型对应一条记录,同时保留对应的spawn_chance值:
from pyspark.sql.functions import explode # 拆分type数组,生成单个类型的行 exploded_df = df.select(explode(df.type).alias("single_type"), "spawn_chance")
2. 按单个类型分组计算平均值
基于拆分后的数据集,直接按single_type分组,计算spawn_chance的平均值:
from pyspark.sql.functions import avg # 分组统计单个类型的平均出现概率 result_df = exploded_df.groupBy("single_type").agg(avg("spawn_chance").alias("avg_spawn_chance")) result_df.show()
执行上述代码后,就能得到Grass、Poison、Fire等单个类型对应的平均出现概率,而非原有的类型组合统计结果。
内容的提问来源于stack exchange,提问作者Bob Editor
相关产品推荐
相关产品推荐

