在Python中使用rddv/SparkSQL计算标准偏差

2024-10-06 12:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我对spark的世界还很陌生(在某种程度上甚至是Python,但更好)。我正在尝试计算标准偏差,并使用了以下代码。第一个使用SparkSQL的代码如下:

 sqlsd=spark.sql("SELECT STDDEV(temperature) as stdtemp from 
 washing").first().stdtemp
 print(sqlsd)

上面的方法很好(我认为),结果是6.070

现在,当我尝试使用RDD和下面的代码:-在

^{pr2}$

当我运行上面的代码时,我得到了不同的结果。我得到的值是53.195

我做错了什么?。上面我要做的就是计算spark数据帧列温度的标准偏差,并使用lambda。在

提前感谢你的帮助。。在


Tags: 代码fromsqlas世界selectsparktemperature
2条回答

感谢Zero323给了我线索。我跳过了空值。修改后的代码为以下内容:-在

 df2=df.na.drop(subset=["temperature"])
 rddT=df2.rdd.map(lambda r: r.temperature)
 c=rddT.count()
 s=rddT.map(lambda x: pow(x-m,2)).sum()
 sd=math.sqrt(s/c)
 return(sd)

有两种类型的标准偏差-请参考:https://math.stackexchange.com/questions/15098/sample-standard-deviation-vs-population-standard-deviation

类似的问题- Calculate the standard deviation of grouped data in a Spark DataFrame

配置单元中的stddev()是指向stddev_samp()的指针。stddev_pop()是您要查找的(从代码的第2部分推断)。所以您的sql查询应该是select stddev_pop(temperature) as stdtemp from washing

相关问题 更多 >