sc.makeRDD(Array(1,2,2,3,3,3),2)
.map(x=>(x,1))
.map(a => (a._1, (a._2, 1))) .reduceByKey((a,b) => (a._1+b._1,a._2+b._2)) .map(t => (t._1,t._2._1/t._2._2))
求一组数的平均值
val rdd = Array(1,2,2,3,3,3)
println(rdd.sum() / rdd.count())
求value的平均值
val rdd = Array(("tom",1),("tom",2),("alice"2))
val map = rdd.map(x => (1,x._2))
//求总和
val res = map.reduceByKey(_+_)
//求总个数
val l = map.count()
import org.apache.spark.sql.functions.mean
val avgScore: Double = dataframe.withColumn("avg_score_column", mean("score_column"))
.rdd.map(row => (row.getAs[Double]("avg_score"))).collect().apply(0)
val conf = new SparkConf().setAppName("hh")
conf.setMaster("local[3]")
val sc = new SparkContext(conf)val data = sc.textFile("/home/hadoop4/Desktop/i.txt")
.map(_.split("\t")).map(f => f.map(
val a = List(1.0,2.0,3.0,4.0,5.0)
val b = a.map(x=>(x,1.0)).reduce((x,y)=>(x._1+y._1,x._2+y._2))
val avg = b._1/b._2
下图是运行结果
注意:val b = a.map(x=>(x,1.0)).reduce((x,y)=>(x._1+x._2,y._1+y._2))这样求值
实验内容:
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写spark独立应用程序求出所有学生的平均成绩。
下面是输入文件和输出文件的一个样例:
Algorithm成绩:
小明 92
小红 87
小新 82
小丽 90
Database成绩:
小明 95
小红 81
小新 89
小丽 85
Python成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88
1.前因后果
在网上看到了一种用Spark
求平均值
的算法,自己写了下,修改了一些错误,我这是能直接run起来的版本。我会在本文中对这段代码进行详细的讲解,以加强对reduceByKey用法的印象。耐心看完,保证你对reduceByKey算子理解且不会忘了。
首先把这位老哥测试的原始数据给大家:
FFF 578
GGG 839
EEE 566
AAA 815
AAA 334
FFF 268...
{"bid": "1","品牌":"奥迪","厂商":"一汽-大众奥迪","csid":"5"}
{"bid": "1","品牌":"奥迪","厂商":"奥迪(进口)","csid":"63"}
{"bid": "1","品牌":"奥迪","厂商":"奥迪RS","csid":"276"}
{"bid": "56","品
val listA = List(1,2,3,4,5)
//foreach接收的是一个函数:其返回值是一个unit(空)类型
println(listA.foreach((x:Int)=>print(x.toString+" ")))
//使用类型推断简化函数定义:
println(
Province("Beijing", 21540000),
Province("Shanghai", 24240000),
Province("Guangdong", 113460000),
Province("Jiangsu", 80290000),
Province("Zhejiang", 54426891)
val grouped = provinces.groupBy(_.name)
val averages = grouped.mapValues(provs => provs.map(_.population).sum.toDouble / provs.size)
averages.foreach { case (province, avg) =>
println(s"$province: $avg")
输出结果为:
Beijing: 21540000.0
Shanghai: 24240000.0
Guangdong: 37815000.0
Jiangsu: 40145000.0
Zhejiang: 18142297.0
其中,groupedBy 返回一个 Map,键为省份名称,值为该省份的 Province 对象列表。mapValues 对每个省份的 Province 列表进行处理,返回该省份的平均人口数量。最后,遍历平均数 Map 并输出每个省份的平均人口数量。
Mysql错误:check the manual that corresponds to your MySQL server version for the right syntax
223699
解决POSTMAN传参报错,JSON parse error: Cannot deserialize instance of `java.util.ArrayList` out of START_OB
50141