您的位置:首页 > 数据库

hive和spark-sql计算stddev的结果差异

2017-11-03 16:48 1061 查看

问题描述:

利用spark-sql得到了NaN的值,核对发现这些值都是关于stddev计算后得到的,但是在hive中查得为0.0。

使用的SQL代码为

select
phone
, tour_ymd
, stddev(total_price) as total_price_stddev
, stddev(bedroom_cnt) as bedroom_cnt_stddev
, stddev(tour_last_mintues) as tour_last_mintues_stddev
, stddev(showing_last_3day_cnt) as showing_last_3day_cnt_stddev
, stddev(showing_last_7day_cnt) as showing_last_7day_cnt_stddev
, stddev(showing_last_15day_cnt) as showing_last_15day_cnt_stddev
, stddev(showing_last_30day_cnt) as showing_last_30day_cnt_stddev
, stddev(temp) as stddevtemp
, stddev(humidity) as stddevhumidity
, stddev(aqi) as stddevaqi
from my_tb
where my_condition
group by phone, tour_ymd

问题原因:

虽然都执行的是一个SQL代码,但是从结果上看,hive中执行的时候是除以N(标准差)而spark-sql中执行时除以的是N-1(贝塞尔修正的标准差)

关于方差标准差知识点

方差:描述数据集中数据点的离散程度;数学公式如下:



其中N的作用为将计算得到的累积偏差进行平均,从而消除数据集大小对计算数据离散程度所产生的影响。

标准差数学上定义为方差的平方根



方差和标准差都是对一组(一维)数据进行统计的,反映的是一维数组的离散程度;与之相对应的是协方差,对两组数据进行统计的,反映的是两组数据之间的相关性。

使用标准差的优势

与方差相比,使用标准差来表示数据点的离散程度有3个好处:

表示离散程度的数字与样本数据点的数量级一致,更适合对数据样本形成感性认知;
表示离散程度的数字单位与样本数据及均值的单位一致,更方便做后续的分析运算;
在样本数据大致符合正态分布的情况下,标准差具有方便估算的特性:“3希格玛原则”。

贝塞尔修正

除了上述方差的计算方式,还有一种计算方式,公式如下



使用N所计算得到的方差及标准差只能用来表示该数据集本身(population)的离散程度;如果数据集是某个更大的研究对象的样本(sample),那么在计算该研究对象的离散程度时,就需要对上述方差公式和标准差公式进行贝塞尔修正,将N替换为N-1。

即是除以 N 还是 除以 N-1,则要看样本是否全:如果是抽样,则除以N-1,如果是全部,则除以N。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive 数学