如何聚合列以获得pyspark中的标准开发

zdwk9cvp  于 2023-02-03  发布在  Spark
关注(0)|答案(1)|浏览(150)

我有一个数据框,我按日期和名称分组,然后聚合平均价格。

df.filter("some filter")
    .withColumn("price_int", df.print.cast('integer')) 
    .groupBy("Date", 'name')
    .agg(avg(col('price_int')))

我想得到price_int列的max和stddev。

df.filter("some filter")
    .withColumn("price_int", df.print.cast('integer')) 
    .groupBy("Date", 'name')
    .agg(avg(col('price_int'),
 max(col('price_int'),
 stddev(col('price_int'),
 )))

但是当我添加max(col('price_int)时,我得到错误消息Column is not iterable。当我添加stddev(col('price_int)时,我得到错误消息'stdev is not defined'
您能告诉我如何获得列“price_int”的“max”和“standard dev”吗?

qgzx9mmu

qgzx9mmu1#

我怀疑问题出在哪里,因为你提供的代码似乎有语法混乱,但在任何情况下-以下将工作:

from pyspark.sql import functions as F

df.filter("some filter")
    .withColumn("price_int", df.print.cast('integer')) 
    .groupBy("Date", 'name')
    .agg(F.avg(F.col('price_int')).alias("Average"), F.stddev(F.col("price_int")).alias("Std_Deviation"), F.max(F.col("price_int")).alias("Maximum"))

对我有效:

此外,请注意Spark有2个不同的标准差函数:
stddev()或stddev_samp()-返回组中表达式的无偏样本标准差
stddev_pop()-返回组中表达式的总体标准差。

相关问题