spark常用RDD算子 - Reduce(),fold()
reduce(fun) 算子:
每次傳入兩個參數通過fun 的到一個返回值,該返回值繼續與后面的值進行調用fun,
直到所有的數據計算完成,最后返回一個計算結果
reduce算子代碼示例
List<Integer> number = Arrays.asList(3,2,5,4,7);
JavaRDD<Integer> numRDD = javaSparkContext.parallelize(number);//比如這里的函數,每兩個元素相加
int reuslt = numRDD.reduce(new Function2<Integer, Integer, Integer>() {@Overridepublic Integer call(Integer integer, Integer integer2) throws Exception {return integer+integer2;}
});//最后的結果為 21
System.err.println(reuslt);
?
fold算子
fold跟reduce是差不多,只不過fold有初使值,先計算各個分區與初使值的結果,存入數組,再計算結果與初使值的值。
可以得出當有1個分區時,初值被計算2次,第一次與分區數據,第二次與分區結果數據
fold算子?代碼示例
List<Integer> number = Arrays.asList(3,2,5,4,7);
JavaRDD<Integer> numRDD = javaSparkContext.parallelize(number,2);
System.out.println(numRDD.glom().collect());
//numRDD的返回結果如下 [[3, 2], [5, 4, 7]]Integer fold = numRDD.fold(1, new Function2<Integer, Integer, Integer>() {@Overridepublic Integer call(Integer integer, Integer integer2) throws Exception {return integer + integer2;}
});
System.out.println(fold);
//最終fold的計算結果為 24
//計算過程如下
// 3+2+1=6
// 5+4+7+1=17
// 6+17+1=24
?
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處:https://dhexx.cn/hk/18454.html
如若內容造成侵權/違法違規/事實不符,請聯系我的編程經驗分享網進行投訴反饋,一經查實,立即刪除!