Pyspark RDD标准偏差的意外更改

问题描述 投票:0回答:1

我遵循Raju Kumar的PySpark配方,在配方4-5上,我发现当您执行rdd.stats()和rdd.stats()。asDict()时,会得到不同的标准偏差值。这在BTW书中并未引起注意。

这里是重现发现的代码

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}

现在,我知道第一种情况下的标准偏差是“人口”标准偏差公式,第二种情况是总体标准dev的无偏估计量(又称为“样本标准差”)。请参阅an article以供参考。但是我不明白的是为什么它们会从一种输出变为另一种输出,我的意思是.asDict()应该只更改输出的格式,而不是它的含义。

那么,有人知道这种变更的逻辑吗?

apache-spark pyspark rdd
1个回答
0
投票

我的意思是,看起来.asDict()应该只是更改输出的格式,不是它的意思。

我并没有真正改变意思。 pyspark.statcounter.StatCounter同时提供samplepopulation变体

>>> 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}
© www.soinside.com 2019 - 2024. All rights reserved.