val rdd=sc.makerdd(list(
("a",1
),("a",2
),("a",3
),("b",1
),("b",2
),("b",3
),("b",4
),("a",4
)),2
)
對每個key的第乙個對應的value作為初始值 生成乙個(value,1)元組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)
).mapvalues(x=>x._1/x._2)
.collect(
).mkstring(
",")
)
分區內 把(value ,1)作為引數 x 下乙個 value 作為 y x._1累加求和 x._2+1求次數 返回乙個(sum,count)
分區間 把(sum,count)作為引數x 下乙個作為y 生成(last_sum,last_count)
兩者相除就是平均值
用逗號分割
map生成(key,(value,1))元組rdd.map(x =>
(x._1,
(x._2,1)
)).reducebykey(
(x,y)
=>
(x._1+y._1,x._2+y._2)
).map(x =>
(x._1,x._2._1/x._2._2)
)
reducebykey 按 key分割槽 生成(key(sum,count))
map 生成(key,sum/count)
map 生成(key,(value,1))rdd.map(x=>
(x._1,
(x._2.todouble,1)
)).foldbykey(
(0.0,0
))((x,y)
=>
(x._1+y._1,x._2+y._2)
).mapvalues(x=>x._1/x._2)
foldbykey 傳入初始值(start_sum,start_count)start_sum加上每個key的value start_count 加上每個1
mapvalues 對 values 進行除操作
hive UDAF求平均值
最近做資料遷移專案,把聚合部分從kettle遷移到hadoop集群上,需要寫很多聚合指令碼 在論壇是看到alipay同事寫過類似cube的udaf,拿過來執行下報錯,有幾個地方沒看多,而且沒有注釋,只好從基礎開始看,自己搞乙個,之前寫過udf所以入手還是聽快的 準備 1 實現自己的udaf需要整合u...
大數求平均值公式
方法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 方法...
MapReduce之求平均值
1 map端讀取檔案資訊內容 在讀取檔案資訊內容時,首先對檔案資訊進行切分,將檔案切分為key和value,便於檔案資訊的計算 override protected void map longwritable key,text value,context context throws ioexcep...