Pyspark RDD标准差的意外变化



我遵循Raju Kumar的PySpark配方,在配方4-5中,我发现当你做rdd.stats((和rdd.stats((.asDict((时,你会得到不同的标准偏差值。顺便说一句,这在书中没有引起注意。

这是重现调查结果的代码

import pyspark
sc = pyspark.SparkContext()
air_speed = [12,13,15,12,11,12,11]
air_rdd = sc.parallelize(air_speed)
print(air_rdd.stats())
print(air_rdd.stats().asDict())

这是输出

(count: 7, mean: 12.285714285714286, stdev: 1.2777531299998799, max: 15.0, min: 11.0)
{'count': 7, 'mean': 12.285714285714286, 'sum': 86.0, 'min': 11.0, 'max': 15.0, 'stdev': 1.3801311186847085, 'variance': 1.904761904761905}

现在,我知道第一种情况的 stdev 是"人口"stdev 公式,而第二种情况是 总体标准 dev 的无偏估计量(又名"样本标准差"(。请参阅文章以供参考。但我不明白的是为什么它们从一个输出更改为另一个输出,我的意思是它看起来像 .asDict(( 应该简单地更改输出的格式,而不是它的含义。

那么,有人理解这种变化的逻辑吗?

我的意思是看起来.asDict((应该简单地更改输出的格式,而不是它的含义。

我并没有真正改变意思。pyspark.statcounter.StatCounter提供样本和总体变异

>>> stats = air_rdd.stats()                                                                             
>>> stats.stdev()                                                                                       
1.2777531299998799
>>> stats.sampleStdev()                                                                                 
1.3801311186847085

您可以选择转换为字典时应使用哪一个:

>>> stats.asDict()                                                                                      
{'count': 7, 'mean': 12.285714285714286, 'sum': 86.0, 'min': 11.0, 'max': 15.0, 'stdev': 1.3801311186847085, 'variance': 1.904761904761905}
>>> stats.asDict(sample=True)                                                                           
{'count': 7, 'mean': 12.285714285714286, 'sum': 86.0, 'min': 11.0, 'max': 15.0, 'stdev': 1.2777531299998799, 'variance': 1.63265306122449}

最新更新