spark计算平均值

对于

Array((‘a‘,1), (‘a‘,2), (‘b‘,3), (‘a‘,4), (‘a‘,15))如何计算平均值呢:

原来通过计算两边,第一遍计算总次数
val a = sc.parallelize(data).map(x=>1)val b = sc.parallelize(data).map(x=>x._2)val count = a.reduce(_+_)val value = b.reduce(_+_)print(value/count)但是这样需要对数据做两次处理,效率大大的下降。能不能只对数据做一次处理就能得到次数和总和呢。以下方法可以做到。

val data = Array((‘a‘,1), (‘a‘,2), (‘b‘,3), (‘a‘,4), (‘a‘,15))//此处将tuple第一项设置为次数,第二项为待相加的值val distData = sc.parallelize(data).map(x=>(1,x._2))//聚合方法,第一项计算总数,第二项计算总和val add =(x:(Int,Int),y:(Int,Int))=>{(x._1+y._1,x._2+y._2)}//开始计算,最后的结果是 (次数,总和)val ret = distData.reduce(add)//计算平均值print(ret._2/ret._1)

通过修改add方法,将计算的结果放入到tuple中,即可对数据一次处理时,得到想要的结果。


				
时间: 2024-08-29 23:33:34

spark计算平均值的相关文章

7.01 计算平均值

问题:计算某个列的平均值,它可以包含表中的所有行,也可以只包含其中的某个子集.例如,计算所有职员的平均工资以及每个部门的平均工资. 解决方法:当计算所有职员的平均工资时,只需要把AVG函数应用于工资列即可.select avg(sal) as avg_sal from emp group by deptno; 要计算每个部门的平均工资,需使用GROUP BY子句,它按每个部门创建分组:select deptno,avg(sal) as avg_sal from emp group by dept

【Spark深入学习 -13】Spark计算引擎剖析

----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark on Yarn运行流程 2.5 WordCount执行原理 3.Spark计算引擎原理 3.1 Spark内部原理 3.2 生成逻辑执行图 3.3 生成物理执行图 4.Spark Shuffle解析 4.1 Shuffle 简史 4.2  Spark Shuffle ·Shuffle Write

matlab 利用while循环计算平均值和方差

一.该程序是用来测输入数据的平均值和方差的 公式: 二. 项目流程: 1. State the problem假定所有测量数为正数或者0,计算这一系列测量数的平均值和方差.假定我们预先不知道有多少测量数据被录入,一个负数标志着测量数据输入结束 2. Define the inputs and outputs程序要求输入的数是未知的正数或者0,程序输出的数是输入数据集的平均值和方差.除此之外,我们将打印出输入的数据数,因为它对于我们检查输入数据是有用的 3.Define the algorithm

初学Java3:数组-从键盘录入若干学生的成绩,计算平均值,最大值,最小值

//任务:从键盘录入若干学生的成绩,计算平均值,最大值,最小值package com.azhi;//纠正昨天的包名,今天老师说要以反域名命名,昨天还不知道,今天就这么弄了一个import java.util.Scanner;public class Text_Array { public static void main(String[] args){ Scanner sc=new Scanner(System.in);//从键盘输入 System.out.print("请输入学生个数:&quo

7.1 计算平均值

问题:计算某个列的平均值,它可以包含表中的所有行,也可以只包含其中的某个子集.例如,计算所有职员的平均工资以及每个部门的平均工资. 解决方法:当计算所有职员的平均工资时,只需要把AVG函数应用于工资列即可.select avg(sal) as avg_sal from emp group by deptno; 要计算每个部门的平均工资,需使用GROUP BY子句,它按每个部门创建分组:select deptno,avg(sal) as avg_sal from emp group by dept

为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?

>>>与>>是位运算符,只对整型有效(不能用于浮点型).当是整型的时候(low+high)>>1可以代替(low+high)/2.>>>是无符号右移运算符.如果 low+high是正整数,这三种运算是等价的. 由于有编译器优化,他们的效率应该是相同的(如果不存在编译器优化,移位运算更快).用>>>一般是有特殊的目的 至于>>>和>>的区别,则在于有符号和无符号.比如-2>>>1的结

Spark计算均值

作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用spark来快速计算分组的平均值,写法很便捷,话不多说上代码 object ColumnValueAvg extends App { /** * ID,Name,ADDRESS,AGE * 001,zhangsan,chaoyang,20 * 002,zhangsa,chaoyang,27 * 003,zhangjie,chaoyang,35 * 004,lisi,haidian,24 *

matlab 利用while循环计算平均值和方差(第二版)

第一版中因为公式中含有:分母项:n(n-1),而程序并没有对输入数进行判定,如果仅仅输入一个或者一个都不输入,将会出现除0的情况 基于此,进行第二版改进. 代码: % 脚本文件:states.m % % 目标: % 该程序首先累计输入未知的数(正数或者0),然后计算这个数据集的平均值和方差 % % 版本记录 % 日期 编者 描述 % ===== ========= ================ % 2015-10-4 21:21 泡泡 源码 % 2015-10-4 21:56 泡泡 纠正除0

使用Spark计算PV、UV

日志字段格式: id,ip,url,ref,cookie,time_stamp 把日志文件放到HDFS.仅取了1000行. hadoop fs -put 1000_log hdfs://localhost:9000/user/root/input 直接在Scala Shell中读取文件并计算PV. scala> val textFile = sc.textFile("hdfs://localhost:9000/user/root/input/1000_log") scala>