方法1、
維護乙個cnt記錄當前資料的個數,evr記錄當前的平均值
然後每增減乙個新資料val時,更新這個cnt和evr的值即可
evr += ((val - evr) / ++cnt);
int main()
; //模擬,每產生乙個數就更新這個cnt和evr
for (i = 0; i < sizeof(d) / sizeof(d[0]); ++i)
cout<
方法2、
設x為已有資料的平均數,n為已有資料的個數,新的資料為y
那麼就是
(x * n + y)/(n+1) =( x * (n+1) - x + y )/(n+1) = x + (y-x)/(n+1);
x + (y-x)/(n+1);這樣就簡單了。用double 應該問題不大。
其實結果是同方法1的。
參考出處:
hive UDAF求平均值
最近做資料遷移專案,把聚合部分從kettle遷移到hadoop集群上,需要寫很多聚合指令碼 在論壇是看到alipay同事寫過類似cube的udaf,拿過來執行下報錯,有幾個地方沒看多,而且沒有注釋,只好從基礎開始看,自己搞乙個,之前寫過udf所以入手還是聽快的 準備 1 實現自己的udaf需要整合u...
spark 求平均值
val rdd sc.makerdd list a 1 a 2 a 3 b 1 b 2 b 3 b 4 a 4 2 rdd.combinebykey x x,1 x int,int y int x.1 y,x.2 1 x int int y int int x.1 y.1,x.2 y.2 mapva...
MapReduce之求平均值
1 map端讀取檔案資訊內容 在讀取檔案資訊內容時,首先對檔案資訊進行切分,將檔案切分為key和value,便於檔案資訊的計算 override protected void map longwritable key,text value,context context throws ioexcep...