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

来源:互联网 发布:mina一次接收数据不全 编辑:程序博客网 时间:2024/06/05 09:52

问题描述:

利用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 stddevaqifrom my_tbwhere my_conditiongroup by phone, tour_ymd

问题原因:

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

关于方差标准差知识点

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

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

方差和标准差都是对一组(一维)数据进行统计的,反映的是一维数组的离散程度;与之相对应的是协方差,对两组数据进行统计的,反映的是两组数据之间的相关性。
  • 使用标准差的优势
与方差相比,使用标准差来表示数据点的离散程度有3个好处:
  1. 表示离散程度的数字与样本数据点的数量级一致,更适合对数据样本形成感性认知;
  2. 表示离散程度的数字单位与样本数据及均值的单位一致,更方便做后续的分析运算;
  3. 在样本数据大致符合正态分布的情况下,标准差具有方便估算的特性:“3希格玛原则”。
  • 贝塞尔修正
除了上述方差的计算方式,还有一种计算方式,公式如下

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

阅读全文
0 0
原创粉丝点击