如何使用PySpark计算含列表列的整体平均值?
计算PySpark DataFrame列表列的整体平均值
当然可以实现啦!咱们一步步来操作,最终能得到你预期的26.6这个结果。
首先,先明确咱们的目标:把列表里的字符串元素转成数值,然后把所有列表展开成单个元素,最后计算所有元素的平均值。
步骤1:准备示例数据(如果你的DataFrame已经存在,这步可以跳过)
先创建和你示例一致的DataFrame:
from pyspark.sql import SparkSession from pyspark.sql.functions import explode, col, avg, round # 初始化SparkSession spark = SparkSession.builder.appName("ListAverageCalculation").getOrCreate() # 构造示例数据 sample_data = [ (["1", "23", "18", "9"],), (["62", "47", "6"],), (["34", "61", "5"],) ] df = spark.createDataFrame(sample_data, ["value"]) df.show(truncate=False)
步骤2:核心计算逻辑
这里用到几个关键的PySpark函数:
explode():把列表列的每个元素拆分成单独的行,这样就能逐个处理元素cast("int"):把原本的字符串类型元素转换成整数(也可以用float,不影响平均值结果)avg():计算所有元素的平均值round():可选,用来把结果保留一位小数,和你的预期格式匹配
完整代码如下:
# 展开列表元素 → 转换数据类型 → 计算平均值 average_result = df.select(explode(col("value")).cast("int").alias("numeric_value")) \ .agg(avg("numeric_value").alias("overall_average")) # 查看原始计算结果 average_result.show() # 如果需要和预期一致的一位小数格式 formatted_avg = average_result.select(round(col("overall_average"), 1)).first()[0] print(f"所有元素的整体平均值为:{formatted_avg}")
验证计算过程
咱们手动算一遍验证下:所有元素是1,23,18,9,62,47,6,34,61,5,总和是266,一共10个元素,266÷10=26.6,完全符合你的预期结果~
内容的提问来源于stack exchange,提问作者Meiiso
相关产品推荐
相关产品推荐

