spark 求平均值

2021-10-14 21:50:00 字數 1565 閱讀 9041

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)

).mapvalues(x=>x._1/x._2)

.collect(

).mkstring(

",")

)

對每個key的第乙個對應的value作為初始值 生成乙個(value,1)元組

分區內 把(value ,1)作為引數 x 下乙個 value 作為 y x._1累加求和 x._2+1求次數 返回乙個(sum,count

分區間 把(sum,count)作為引數x 下乙個作為y 生成(last_sum,last_count)

兩者相除就是平均值

用逗號分割

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)

)

map生成(key,(value,1))元組

reducebykey 按 key分割槽 生成(key(sum,count))

map 生成(key,sum/count)

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)

map 生成(key,(value,1))

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...